আপনি যা চান তা সম্পূর্ণভাবে অর্জন করতে পারেন:
services
.AddAuthentication()
.AddJwtBearer("Firebase", options =>
{
options.Authority = "https://securetoken.google.com/my-firebase-project"
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "my-firebase-project"
ValidateAudience = true,
ValidAudience = "my-firebase-project"
ValidateLifetime = true
};
})
.AddJwtBearer("Custom", options =>
{
});
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase", "Custom")
.Build();
});
আসুন আপনার কোড এবং এটির মধ্যে পার্থক্যটি অতিক্রম করুন।
AddAuthentication
কোন পরামিতি আছে
আপনি যদি কোনও ডিফল্ট প্রমাণীকরণ স্কিম সেট করেন, তবে প্রতিটি একক অনুরোধে প্রমাণীকরণের মিডলওয়্যার ডিফল্ট প্রমাণীকরণ স্কিমের সাথে সম্পর্কিত প্রমাণীকরণ হ্যান্ডলারটি চালানোর চেষ্টা করবে। যেহেতু এখন আমাদের দুটি অপস্যাবল প্রমাণীকরণের স্কিম রয়েছে, সেগুলির মধ্যে একটি চালানোর কোনও মানে নেই।
এর আরেকটি ওভারলোড ব্যবহার করুন AddJwtBearer
AddXXX
প্রমাণীকরণ যুক্ত প্রতিটি একক পদ্ধতিতে বেশ কয়েকটি ওভারলোড থাকে:
এখন, আপনি একই প্রমাণীকরণ পদ্ধতিটি দু'বার ব্যবহার করেছেন তবে প্রমাণীকরণের স্কিমগুলি অবশ্যই অনন্য হতে হবে, আপনাকে দ্বিতীয় ওভারলোডটি ব্যবহার করতে হবে।
ডিফল্ট নীতি আপডেট করুন
যেহেতু অনুরোধগুলি আর স্বয়ংক্রিয়ভাবে প্রমাণীকরণ করা হবে না, [Authorize]
কিছু ক্রিয়ায় অ্যাট্রিবিউট লাগানোর ফলে অনুরোধগুলি প্রত্যাখাত HTTP 401
হবে এবং একটি জারি করা হবে।
যেহেতু আমরা এটি চাই না কারণ আমরা প্রমাণীকরণ হ্যান্ডলারদের অনুরোধটি প্রমাণীকরণের একটি সুযোগ দিতে চাই, আমরা অনুমোদনের সিস্টেমের ডিফল্ট নীতি পরিবর্তন করি Firebase
এবং Custom
প্রমাণীকরণের স্কিম উভয়ই অনুরোধটিকে প্রমাণীকরণের চেষ্টা করা উচিত ।
এটি আপনাকে কিছু ক্রিয়াকলাপের প্রতি আরও সীমাবদ্ধ হতে বাধা দেয় না; [Authorize]
অ্যাট্রিবিউট একটি হয়েছে AuthenticationSchemes
সম্পত্তি যে আপনার ওভাররাইড করতে যা প্রমাণীকরণ স্কীম বৈধ পারেন।
আপনার যদি আরও জটিল পরিস্থিতি থাকে তবে আপনি নীতি-ভিত্তিক অনুমোদনের ব্যবহার করতে পারেন । আমি অফিসিয়াল ডকুমেন্টেশন দুর্দান্ত।
আসুন কল্পনা করুন যে কিছু ক্রিয়াগুলি কেবল ফায়ারবেস দ্বারা জারি করা জেডাব্লুটি টোকেনগুলিতে উপলব্ধ এবং নির্দিষ্ট মান সহ একটি দাবি থাকতে হবে; আপনি এটি এইভাবে করতে পারে:
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase", "Custom")
.Build();
options.AddPolicy("FirebaseAdministrators", new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Firebase")
.RequireClaim("role", "admin")
.Build());
});
তারপরে আপনি [Authorize(Policy = "FirebaseAdministrators")]
কিছু ক্রিয়া ব্যবহার করতে পারেন ।
একটি চূড়ান্ত বিষয় লক্ষণীয়: আপনি যদি AuthenticationFailed
ইভেন্টগুলি ধরছেন এবং প্রথম AddJwtBearer
নীতি ব্যতীত অন্য কোনও কিছু ব্যবহার করছেন , আপনি দেখতে পাচ্ছেন যে IDX10501: Signature validation failed. Unable to match key...
এটি AddJwtBearer
ম্যাচ না পাওয়া পর্যন্ত প্রতিটি সিস্টেমকে ঘুরে দেখার কারণে এটি ঘটে । ত্রুটিটি সাধারণত উপেক্ষা করা যায়।