首页 > 解决方案 > 从 WebApi 为 Identity Server 4 中的用户获取所有声明

问题描述

我已经浏览了 Ids4 的示例,特别是 client-webapi 场景。

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

该示例主要说明了客户端如何获取访问令牌、将访问令牌发送到 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 有类似的东西还是我必须自己实现它?我也不想在访问令牌中包含太多信息。

标签: c#asp.net-coreasp.net-web-api.net-coreidentityserver4

解决方案


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

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

您可以UserClaims在 ApiResource(和 Scope)上找到一个属性,以添加应包含在访问令牌中的关联用户声明类型列表。

GetClaimsFromUserInfoEndpoint不是为 API 设计的,有关详细信息,请参阅本文。

如果您不想在令牌中包含声明,您可以使用委托流获取新的访问令牌以获取用户的信息。


推荐阅读