Skip to main content
 首页 » 编程设计

c#之从 Identity Server 4 中的用户的 WebApi 获取所有声明

2024年02月25日33mayingbao

我已经完成了 Ids4 的示例,特别是客户端 webapi 场景。

https://github.com/IdentityServer/IdentityServer4/tree/master/samples/Clients

该示例主要说明了客户端如何获取访问 token 、将访问 token 发送到 WebAPI 以及 WebAPI 根据范围或声明等策略进行检查。

我的场景有以下限制。

  • 访问 token 包含最少的信息。意思是我不放 其中最敏感的所有信息。
  • WebAPI 需要这些政策声明(而不仅仅是范围),因为声明将特定于用户,而不是客户端应用程序。

例子

options.AddPolicy("User", policy => 
{ 
    policy.RequireClaim("ProfileAccess","user:read"); 
}); 
options.AddPolicy("Admin", policy => 
{ 
    policy.RequireClaim("ProfileAccess", "user:read", "user:write"); 
}); 

在 MVC 客户端中,OpenId Connect 配置有一个选项 GetClaimsFromUserInfoEndpoint,它使用 token 调用 UserInfo 端点并将这些声明转换为委托(delegate)人的声明。 WebAPI 是否有类似的东西,还是我必须自己实现?我也不想在访问 token 中包含太多信息。

请您参考如下方法:

最简单的方法是在 Identity Server 颁发访问 token 时在访问 token 中包含所需的声明。这样 API 将在验证 token 后获得声明,您可以创建策略要求来检查声明。您可以定义 API 资源 以包含用户声明。请参阅定义 API 资源:

http://docs.identityserver.io/en/latest/reference/api_resource.html#refapiresource

您会发现 ApiResource(和范围)上有一个 UserClaims 属性,用于添加应包含在访问 token 中的关联用户声明类型列表。

GetClaimsFromUserInfoEndpoint 不是为 API 设计的,参见 this article了解更多详情。

如果不想在tokens中包含claim,可以使用delegation fow获取新的access token来获取用户信息。