সুতরাং, দীর্ঘদিন এই সমস্যাটি সমাধান করার চেষ্টা করার পরে, অবশেষে আমি বুঝতে পেরেছিলাম যে মাইক্রোসফ্ট কীভাবে 2.0 তাদের নতুন একক-মিডলওয়্যার সেটআপের জন্য কাস্টম প্রমাণীকরণের হ্যান্ডলারগুলি তৈরি করতে চায় core
এমএসডিএন-তে কয়েকটি ডকুমেন্টেশন সন্ধানের পরে, আমি একটি ক্লাস পেয়েছি AuthenticationHandler<TOption>
যা IAuthenticationHandler
ইন্টারফেস প্রয়োগ করে ।
সেখান থেকে, https://github.com/aspnet/Security এ অবস্থিত বিদ্যমান প্রমাণীকরণের স্কিমগুলির সাথে একটি সম্পূর্ণ কোডবেস পেয়েছি
এর মধ্যে একটির অভ্যন্তরে এটি দেখায় যে কীভাবে মাইক্রোসফ্ট JwtBearer অনুমোদন স্কিম প্রয়োগ করে। ( https://github.com/aspnet/Security/tree/master/src/Mic Microsoft.AspNetCore.Authentication.JwtBearer )
আমি সেই কোডটির বেশিরভাগটি একটি নতুন ফোল্ডারে অনুলিপি করেছিলাম এবং যা করতে হবে সেগুলি পরিষ্কার করে দিয়েছি JwtBearer
।
ইন JwtBearerHandler
বর্গ (যা প্রসারিত AuthenticationHandler<>
), সেখানে একটি ওভাররাইড এরTask<AuthenticateResult> HandleAuthenticateAsync()
আমি কাস্টম টোকেন সার্ভারের মাধ্যমে দাবি স্থাপনের জন্য আমাদের পুরাতন মিডওয়্যারের সাথে যুক্ত করেছি, এবং এখনও অনুমতি নিয়ে কিছু সমস্যার মুখোমুখি হয়েছি, যখন একটি টোকেন অবৈধ ছিল এবং কোনও দাবি সেট আপ করা হয়নি তখন কেবল 200 OK
তার পরিবর্তে একটি থুতু 401 Unauthorized
দিয়ে।
আমি বুঝতে পেরেছি যে আমি যে Task HandleChallengeAsync(AuthenticationProperties properties)
কোনও কারণে [Authorize(Roles="")]
নিয়ামকের মাধ্যমে অনুমতি নির্ধারণের জন্য ব্যবহৃত হয় যা আমি ওভাররাইড করেছি ।
এই ওভাররাইডটি সরিয়ে দেওয়ার পরে, কোডটি কাজ করেছিল 401
এবং অনুমতিগুলি মিলে না গেলে সফলভাবে একটি নিক্ষেপ করেছিল।
এর প্রধান গ্রহণযোগ্যতা হ'ল এখন আপনি একটি কাস্টম মিডলওয়্যার ব্যবহার করতে পারবেন না, আপনাকে এটি মাধ্যমে প্রয়োগ করতে হবে এবং ব্যবহারের সময় AuthenticationHandler<>
আপনাকে সেট করতে হবে ।DefaultAuthenticateScheme
DefaultChallengeScheme
services.AddAuthentication(...)
এটির মতো দেখতে কী হওয়া উচিত তার উদাহরণ এখানে:
স্টার্টআপ। সি / কনফিগার সার্ভিসগুলিতে () যুক্ত করুন:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "Custom Scheme";
options.DefaultChallengeScheme = "Custom Scheme";
})
.AddCustomAuth(o => { });
স্টার্টআপ। সি / কনফিগার () এ যুক্ত করুন:
app.UseAuthentication();
একটি নতুন ফাইল কাস্টমআথএক্সটেনশন। সি। তৈরি করুন
public static class CustomAuthExtensions
{
public static AuthenticationBuilder AddCustomAuth(this AuthenticationBuilder builder, Action<CustomAuthOptions> configureOptions)
{
return builder.AddScheme<CustomAuthOptions, CustomAuthHandler>("Custom Scheme", "Custom Auth", configureOptions);
}
}
একটি নতুন ফাইল কাস্টমআথওপশনস সি। তৈরি করুন
public class CustomAuthOptions: AuthenticationSchemeOptions
{
public CustomAuthOptions()
{
}
}
একটি নতুন ফাইল কাস্টমআথহ্যান্ডলার সি। তৈরি করুন
internal class CustomAuthHandler : AuthenticationHandler<CustomAuthOptions>
{
public CustomAuthHandler(IOptionsMonitor<CustomAuthOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
return AuthenticateResult.NoResult();
}
}