gpt4 book ai didi

jwt - 同一站点中的 asp net core 2.0 JWT 和 Openid Connect 身份验证

转载 作者:行者123 更新时间:2023-12-04 22:44:00 25 4
gpt4 key购买 nike

我们有一个 aspnetcore 2.0 网站。该站点的大部分是 WebAPI,具有 2 个 UI 组件:swagger 和 hangfire仪表板。

我们正在尝试使用 JWT 和具有 Open ID 的 UI(hangfire 仪表板)组件来保护 Web API 端点。

这是我们的设置

services
.AddSingleton<IConfigureOptions<JwtBearerOptions>, ConfigureJwtBearerOptions>()
.AddSingleton<IConfigureOptions<OpenIdConnectOptions>, ConfigureOpenIdOptions>()
.AddAuthentication(options =>
{
var openId = OpenIdConnectDefaults.AuthenticationScheme;
var jwt = JwtBearerDefaults.AuthenticationScheme;

options.DefaultScheme = jwt;
//options.DefaultAuthenticateScheme = openId;
})
.AddJwtBearer()
.AddCookie()
.AddOpenIdConnect(options =>
{
var cookies = CookieAuthenticationDefaults.AuthenticationScheme;

options.SignInScheme = cookies;
options.SignOutScheme = cookies;
});

services
.AddAuthorization(options => options.AddPolicy(...))
.AddMvcCore(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.Build();

config.Filters.Add(new AuthorizeFilter(policy));
});
....

app.Map(new PathString("/hangfire"), _ => _.UseMiddleware<HangfireDashboardMiddleware>(...));

为了保护 hangfire 仪表板,我们必须创建一个委托(delegate)处理程序来使用 OpenIdConnectDefaults.AuthenticationScheme 进行身份验证和质询。

问题是我们只能获取JWT或者OpenID才能成功授权,获取所有相关的claims。当 //options.DefaultAuthenticateScheme = openId; 被注释掉时,JWT 有效,但 OpenId 陷入本地主机和 AAD 之间的永久循环。当 options.DefaultAuthenticateScheme = openId; 设置时,Open ID 身份验证工作正常,但 JWT 无法获得声明。它似乎确实进行了身份验证。

我们如何为每个路由设置身份验证方案?

最佳答案

我们终于弄明白了。 aspnetcore 按设计只处理 1 个方案。因此,为了处理多个方案,我们需要实现自定义方案。

我们使用了这种方法 https://gist.github.com/profet23/da146bfee5e2daa45bc4f9746aba69e0方案之间选择

关于jwt - 同一站点中的 asp net core 2.0 JWT 和 Openid Connect 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425847/

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