在 ASP.NET Core 中支援多個 JWT 令牌頒發者
本指南介紹如何設定 ASP.NET Core 以對來自多個來源(例如 Firebase 和自訂頒發者)的 JWT 進行驗證。 標準的 AddJwtBearer
方法僅支援單一權限,這使得這是一個常見的挑戰。
解決方案:多種驗證方案
關鍵是在 ASP.NET Core 中利用多種驗證方案。 這允許應用程式獨立處理來自不同發行者的 JWT。
實作(ASP.NET Core 2 及更高版本):
services .AddAuthentication() // No default scheme specified .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 => { // Configure validation parameters for your custom JWT issuer here. // Example: options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "your-custom-issuer", ValidateAudience = true, ValidAudience = "your-api-audience", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key")) // Or your key retrieval method }; }); services .AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddAuthenticationSchemes("Firebase", "Custom") .Build(); });
主要改善:
AddAuthentication()
呼叫時不含參數。這可以防止使用單一方案進行自動身份驗證,從而允許所有定義的方案嘗試進行身份驗證。 AddJwtBearer
與方案名稱(「Firebase」、「自訂」)一起使用來單獨註冊每個頒發者。 處理錯誤:
在身分驗證失敗期間,您可能會遇到 IDX10501
錯誤。這通常是由於身份驗證中間件按順序檢查每個方案所致。 在許多情況下,可以安全地忽略此錯誤。
ASP.NET Core 6 及更高版本:
在較新的版本中,需要預設的身份驗證方案。 這是一個改編後的範例:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Audience = "your-api-audience"; options.Authority = "your-identity-server-url"; // Or your default JWT issuer }) .AddJwtBearer("AzureAD", options => { options.Audience = "your-api-audience"; options.Authority = "your-azure-ad-authority"; }); builder.Services.AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder( JwtBearerDefaults.AuthenticationScheme, "AzureAD") .RequireAuthenticatedUser() .Build(); });
請記得將 "my-firebase-project"
、"your-custom-issuer"
、"your-secret-key"
、"your-api-audience"
、"your-identity-server-url"
和 "your-azure-ad-authority"
等佔位符替換為您的實際值。 考慮對生產環境使用更強大的密鑰管理。 基於策略的授權可以為複雜場景提供更細微的控制。
以上是如何配置 ASP.NET Core 以支援多個 JWT 令牌頒發者(例如 Firebase 和自訂頒發者)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!