gpt4 book ai didi

c# - 如何在 ASP.NET Core 2.0 web api 中添加来自 IdentityServer4 和 Auth0 的 Jwt 身份验证?

转载 作者:行者123 更新时间:2023-11-30 12:55:35 25 4
gpt4 key购买 nike

我们通常需要使用来自 IdentityServer4 的 JWT token ,但对于更复杂的 SSO 场景也需要使用来自 Auth0 的 JWT token 来授权访问 asp.net core 2.0 web api。

Startup.cs ConfigureServices 中的此代码片段尝试为 Auth0 和 IdentityServer4 处理注册身份验证处理程序,但显然因 InvalidOperationException 失败:“方案已存在:Bearer”

        services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Audience = Configuration["Auth0:ApiIdentifier"];
options.Authority = $"https://{Configuration["Auth0:Domain"]}/";
})
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});

如何最好地实现这一目标,我假设涉及基于 token 中发行者的某种类型的单独处理?

最佳答案

事实证明,正如 Muqeet Khan 上面所暗示的,这些方案必须以不同的方式命名,如下所示。

    services.AddAuthentication()
.AddJwtBearer("Auth0", options =>
{
options.Audience = Configuration["Auth0:ApiIdentifier"];
options.Authority = $"https://{Configuration["Auth0:Domain"]}/";
})
.AddIdentityServerAuthentication("IdSrv", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});

但是,默认的 [Authorize] 属性只调用默认的 AuthenticationScheme。我没有为每个授权指定这两种方案,而是在全局范围内注册它们:

    services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters()
.AddMvcOptions(options =>
{
var policy = new AuthorizationPolicyBuilder("IdSrv", "Auth0")
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});

关于c# - 如何在 ASP.NET Core 2.0 web api 中添加来自 IdentityServer4 和 Auth0 的 Jwt 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47604683/

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