gpt4 book ai didi

c# - 如何使自定义用户声明在 API 请求中可用

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

我有一个解决方案,包括:

  • 在 ASP.NET Identity Core 之上运行 IdentityServer4 的 ASP.NET Core 2.1。
  • ASP.NET Core 2.1 Web API 设置为使用 IdentityServer 作为身份验证提供程序。
  • 使用 oidc-client javascript 库的 React SPA 网络应用程序。

当我创建新用户时,我设置了一些保存在 AspNetUserClaims 表中的自定义声明,如下所示: enter image description here

然后,在我的 API 项目中,在一个 Controller 中,我想获得经过身份验证的用户的那些用户声明。
我期待 this.User.Claims 给我这些,但它返回了以下内容,这似乎是与客户端应用程序相关的声明,而不是与用户相关的声明。

enter image description here

如何从 Web API 项目内的 Controller 访问这些自定义用户声明(地址、位置、tenant_role)?
请记住,API 项目无权访问 UserManager 类或任何与 ASP.NET Identity Core 相关的内容。

最佳答案

因此,我命令我的自定义用户声明在每个 API 请求中可用 我在 IdentityServer 启动时设置 ApiResource 时必须执行以下操作。

//Config.cs
public static IEnumerable<ApiResource> GetApiResources()
{
ApiResource apiResource = new ApiResource("api1", "DG Analytics Portal API")
{
UserClaims =
{
JwtClaimTypes.Name,
JwtClaimTypes.Email,
AnalyticsConstants.TenantRoleClaim // my custom claim key/name
}
};

return new List<ApiResource>
{
apiResource
};
}

此方法传递给 services.AddInMemoryApiResources(或您正在使用的任何存储方法)

IIdentityServerBuilder builder = services
.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
})
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources()) // here
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<ApplicationUser>();

通过该设置,每当命中 API 端点时,我的自定义 TenantRole 声明就会出现,因此我可以简单地执行 User.FindFirst(AnalyticsConstants.TenantRoleClaim) 来获取它.

关于c# - 如何使自定义用户声明在 API 请求中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709735/

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