c# - 从 WebApi 为 Identity Server 4 中的用户获取所有声明
问题描述
我已经浏览了 Ids4 的示例,特别是 client-webapi 场景。
https://github.com/IdentityServer/IdentityServer4/tree/master/samples/Clients
该示例主要说明了客户端如何获取访问令牌、将访问令牌发送到 WebAPI 以及 WebAPI 如何根据范围或声明等策略进行检查。
我的场景有以下限制。
- 访问令牌包含最少的信息。这意味着我没有把所有最敏感的信息都放在里面。
- 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,它使用令牌调用 UserInfo 端点并将这些声明转换为主体的声明。WebAPI 有类似的东西还是我必须自己实现它?我也不想在访问令牌中包含太多信息。
解决方案
最简单的方法是在 Identity Server 发出访问令牌时在访问令牌中包含所需的声明。这样 API 将在验证令牌后获取声明,您可以创建策略要求来检查声明。您可以定义API resources
以包含用户声明。请参阅定义 API 资源:
http://docs.identityserver.io/en/latest/reference/api_resource.html#refapiresource
您可以UserClaims
在 ApiResource(和 Scope)上找到一个属性,以添加应包含在访问令牌中的关联用户声明类型列表。
GetClaimsFromUserInfoEndpoint
不是为 API 设计的,有关详细信息,请参阅本文。
如果您不想在令牌中包含声明,您可以使用委托流获取新的访问令牌以获取用户的信息。
推荐阅读
- java - 将火花数据帧写入固定宽度文件java spark
- python - 查找重复的行对而不考虑列顺序
- php - 为什么这段代码不想工作?html表单和php插入问题
- python - 在整行上过滤 df
- python - 如何插入 2 个不同的数据集(Python)
- regex - 为什么以下正则表达式仅排除单词的第一个字母?
- npm - 从另一个 package.json 安装特定包的依赖项
- javascript - 如何检测动态创建的 HTML 元素被点击
- python - 3 个标签的 TensorFlow 图像分类精度为 0.33
- c++ - 如何使用 Makefile 生成来自不同目录的头文件的依赖关系?