首頁 >後端開發 >C++ >如何在 ASP.NET Core 中處理多個 JWT 頒發者?

如何在 ASP.NET Core 中處理多個 JWT 頒發者?

DDD
DDD原創
2025-01-12 06:55:431063瀏覽

How to Handle Multiple JWT Issuers in ASP.NET Core?

在 ASP.NET Core 2 中處理多個 JWT 發行者

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>

此程式碼與原始程式碼片段在幾個關鍵方面有所不同:

  1. 驗證方案重載: AddJwtBearer 方法有多個重載,其中一個允許指定驗證方案名稱。由於我們有多個方案,因此必須使用此重載。
  2. 無預設驗證方案: AddAuthentication 方法不含參數使用,以避免設定預設驗證方案。這是因為處理多個身份驗證方案需要每個請求都經過所有方案。
  3. 政策更新: DefaultPolicy 已修改為允許 "Firebase" 和 "Custom" 驗證方案。這可確保授權系統嘗試使用這兩種方案對請求進行身份驗證。
  4. 驗證處理: 如果您處理 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn