首页 > 后端开发 > C++ > 如何配置 ASP.NET Core 以支持多个 JWT 令牌颁发者(例如 Firebase 和自定义颁发者)?

如何配置 ASP.NET Core 以支持多个 JWT 令牌颁发者(例如 Firebase 和自定义颁发者)?

DDD
发布: 2025-01-12 06:24:47
原创
338 人浏览过

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 及更高版本):

<code class="language-csharp">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();
    });</code>
登录后复制

主要改进:

  • 无默认身份验证方案: AddAuthentication() 调用时不带参数。这可以防止使用单一方案进行自动身份验证,从而允许所有定义的方案尝试进行身份验证。
  • 命名身份验证方案: AddJwtBearer 与方案名称(“Firebase”、“自定义”)一起使用来单独注册每个颁发者。
  • 组合授权: 默认授权策略配置为同时使用“Firebase”和“自定义”方案。 这可确保针对两个发行者进行身份验证尝试。

处理错误:

在身份验证失败期间,您可能会遇到 IDX10501 错误。这通常是由于身份验证中间件按顺序检查每个方案所致。 在许多情况下,可以安全地忽略此错误。

ASP.NET Core 6 及更高版本:

在较新的版本中,需要默认的身份验证方案。 这是一个改编后的示例:

<code class="language-csharp">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();
});</code>
登录后复制

请记住将 "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中文网其他相关文章!

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