gpt4 book ai didi

asp.net-core - 从 ASP.NET Core 3.1 升级到 ASP.NET 5.0 后 User.Claims 为空

转载 作者:行者123 更新时间:2023-12-04 15:13:07 26 4
gpt4 key购买 nike

从 ASP.NET Core 3.1 升级到版本 5 后,context.User.Claims是空的

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
public class MyRequirementHandler : AuthorizationHandler<MyRequirement>
我正在使用 Authorization带有 JWT 不记名 token 的 header 。查看 HttpContext.Request.Headers 时,我可以看到标题设置正确但它似乎没有被解析。
这是在带有 [Authorize] 的 Grpc 服务上设置的属性。
使用 ASP.NET Core 3.1,它运行良好。我经历了 official migration guide但他们关于授权的引用仅适用于 Azure Active Directory。
我正在使用在该 ASP.NET Core 应用程序中托管的 IdentityServer4 作为中间件 ( app.UseIdentityServer();)
我忘记修改什么才能让 ASP.NET Core 正确解析授权 header ?
更新:
我更详细地检查了它并注意到它失败了,因为它无法验证观众( aud ) - 是的,在新创建的 token 上,观众丢失了(旧 token 有观众)。我还注意到我添加的自定义范围
public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
在我的习惯里面
public class ProfileService : ProfileService<ApplicationUser>
更新后也不见了。这是 IdentityServer 的配置方式:
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, AppIdentityDbContext>()
.AddProfileService<ProfileService>()
.AddInMemoryIdentityResources(AuthResources.GetIdentityResources())
.AddInMemoryApiResources(AuthResources.GetApiResources())
.AddInMemoryClients(TestClientsRequired
? ClientsForTesting.GetTestClients()
: Clients.GetDefaultClients());

最佳答案

在确定问题可能是由于缺少观众 ( aud ) 之后,我进一步查找并找到了 Missing "aud" claim in access token - 答案是,明确添加观众作为声明,并再次设置范围,并且它起作用了。
对我来说,这看起来像以下方式:

public static IEnumerable<ApiResource> GetApiResources()
{
yield return ApiResourceBuilder
.IdentityServerJwt(MyWebApiResource)
.AllowAllClients()
.Build()
.AddUserClaims()
.AddScopes(); // <- this is new
}

private static T AddUserClaims<T>(this T resource)
where T : Resource
{
resource.UserClaims.Add(Constants.CustomClaimTypes.MyRoles);
resource.UserClaims.Add(JwtClaimTypes.Audience); // <- this is new

return resource;
}

// this whole method is new ->
private static T AddScopes<T>(this T resource)
where T : ApiResource
{
resource.Scopes.Add(MyWebApiResource);

return resource;
}

关于asp.net-core - 从 ASP.NET Core 3.1 升级到 ASP.NET 5.0 后 User.Claims 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64842625/

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