首页 > 后端开发 > C++ > 如何在 ASP.NET Core 中处理多个 JWT 颁发者?

如何在 ASP.NET Core 中处理多个 JWT 颁发者?

DDD
发布: 2025-01-12 06:55:43
原创
1059 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板