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>
此代码与原始代码片段在几个关键方面有所不同:
AddJwtBearer
方法有多个重载,其中一个允许指定身份验证方案名称。由于我们有多个方案,因此必须使用此重载。AddAuthentication
方法不带参数使用,以避免设置默认身份验证方案。这是因为处理多个身份验证方案需要每个请求都经过所有方案。DefaultPolicy
已修改为允许 "Firebase" 和 "Custom" 身份验证方案。这确保授权系统尝试使用这两种方案对请求进行身份验证。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中文网其他相关文章!