首頁 > 後端開發 > C++ > 如何配置 ASP.NET Core 以支援多個 JWT 令牌頒發者(例如 Firebase 和自訂頒發者)?

如何配置 ASP.NET Core 以支援多個 JWT 令牌頒發者(例如 Firebase 和自訂頒發者)?

DDD
發布: 2025-01-12 06:24:47
原創
406 人瀏覽過

How can I configure ASP.NET Core to support multiple JWT token issuers (e.g., Firebase and a custom issuer)?

在 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」、「自訂」)一起使用來單獨註冊每個頒發者。
  • 組合授權: 預設授權策略配置為同時使用「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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板