我已经完成了 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来获取用户信息。
