gpt4 book ai didi

c# - 在策略上使用多个身份验证方案会导致签名验证失败

转载 作者:行者123 更新时间:2023-12-03 17:14:43 24 4
gpt4 key购买 nike

我有两个不同的 jwt auth token 来自我的 api 接受的两个不同的提供者,设置如下:

    services.AddAuthentication()
.AddJwtBearer("auth provider1", options =>
{
options.Audience = authSettings.Audience1;
options.Authority = authSettings.Authority1;
options.ClaimsIssuer = authSettings.Issuer1;
})
.AddJwtBearer("auth provider2", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ClockSkew = TimeSpan.FromMinutes(5),
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authSettings.SymmetricKey)),
RequireSignedTokens = true,
RequireExpirationTime = true,
ValidateLifetime = true,
ValidateAudience = true,
ValidAudience = authSettings.Audience2,
ValidateIssuer = true,
ValidIssuer = authSettings.Issuer2
};
});

这些身份验证提供程序可以访问不同的 API,因此当访问 token 尝试访问 API 时,不允许我抛出 403。我通过以下策略设置来完成此操作
    services.AddAuthorization(options =>
{
// Blocks auth provider 2 tokens by returning 403 because it does not have claim only present in tokens from auth provider 1
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireClaim(Constants.CLAIM_ONLY_IN_AUTH_1)
.AddAuthenticationSchemes("auth provider1", "auth provider2")
.Build();

// Accepts both auth provider tokens
options.AddPolicy("accept both auth1 and auth2 policy", new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("auth provider1", "auth provider2")
.Build());
});

当我使用这些策略中的任何一个时,我遇到了以下异常,因为我相信管道会尝试验证在两个身份验证方案中传入的身份验证 token 。

IDX10501: Signature validation failed. Unable to match 'kid':



异常不会冒泡并终止请求,它只会给我的日志记录增加很多噪音,有人在一个策略上使用多个身份验证方案时遇到过这个异常吗?

最佳答案

在 OnAuthenticationFailed > jwtOptions.Events 之一下,添加一个条件,如果它已通过身份验证,则完成任务并且不显示错误。有时用户已经通过身份验证,但来自一个提供商的错误阻止了正确的响应

 if (arg.HttpContext.User.Identity.IsAuthenticated)
{
return Task.CompletedTask;
}

如果您在对两个 jwt 提供程序进行身份验证时遇到问题,您可以在此处尝试其他解决方案: .net core 2.2 multiple bearer token authentication schemes

关于c# - 在策略上使用多个身份验证方案会导致签名验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52877713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com