ASP.NET Core 2 支援處理多個 JWT 令牌提供者。當您的 API 需要與使用不同 JWT 令牌發行機制的外部服務整合時,此功能至關重要。
實現此功能,請使用以下程式碼:
<code class="language-csharp">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 => { // 在此处配置自定义 JWT 令牌选项 }); services .AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddAuthenticationSchemes("Firebase", "Custom") .Build(); });</code>
此程式碼與原始程式碼片段在幾個關鍵方面有所不同:
AddJwtBearer
方法有多個重載,其中一個允許指定驗證方案名稱。由於我們有多個方案,因此必須使用此重載。 AddAuthentication
方法不含參數使用,以避免設定預設驗證方案。這是因為處理多個身份驗證方案需要每個請求都經過所有方案。 DefaultPolicy
已修改為允許 "Firebase" 和 "Custom" 驗證方案。這可確保授權系統嘗試使用這兩種方案對請求進行身份驗證。 AuthenticationFailed
事件,請注意,對於非第一個 AddJwtBearer
策略,可能會出現錯誤 "IDX10501: Signature validation failed"。這是因為系統嘗試依序匹配每個策略的簽章。 .NET Core 6 及更高版本的附加說明
在 .NET Core 6 及更高版本中,必須指定預設授權方案。因此,請改用以下程式碼:
<code class="language-csharp">builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { // Firebase 配置 }) .AddJwtBearer("AzureAD", options => { // Azure AD 配置 }); builder.Services.AddAuthorization(options => { var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder( JwtBearerDefaults.AuthenticationScheme, "AzureAD"); defaultAuthorizationPolicyBuilder = defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser(); options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build(); });</code>
透過實作提供的解決方案,您可以無縫管理 ASP.NET Core 2 應用程式中的多個 JWT 令牌發行者。
以上是如何在 ASP.NET Core 中處理多個 JWT 頒發者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!