Identity Server4 的 UserInfo 终结点中的租户标识



我的客户端应用程序使用 ACR_VALUES 在身份验证重定向时传回租户名称,我可以在 AuthorizeInteractionResponseGenerator 的实现中使用来处理特定于租户的登录/同意相关代码。 在身份验证回调之后,我的客户端使用 UserInfo 终结点获取有关用户的声明,我的 IProfileService 需要知道的一件事是租户检查某些声明。 我无法找到一种方法来向 UserInfo 终结点和上下文指示租户。此时的主题在登录过程的早期没有声明问题。 我确实注意到令牌端点将查看ACR_VALUES,但是当我进行这些调用时,上下文。主题基于登录的用户,因此声明从早期开始存在,但该令牌中没有返回任何声明。

在IProfileService的实现中调用UserInfo期间,我是否缺少一些东西?

在 IdentityServer4 中搜索适当的扩展性选项几个小时后,这就是我最终得到的。 默认的 UserInfo 终结点不查看 ACR 值,我不想构建自己的终结点实现,因此我在调用 :

IHttpClientFactory factory = context.HttpContext.RequestServices.GetRequiredService<IHttpClientFactory>();
System.Net.Http.HttpClient client = factory.CreateClient();
client.DefaultRequestHeaders.Add("X-Tenant", tenant.ShortName);
UserInfoResponse userInfoResponse = await client.GetUserInfoAsync(new UserInfoRequest
{
Address = doc.UserInfoEndpoint,
Token = tokenResponse.AccessToken
});

为了在我的IProfileService中访问这个值,我注入了IHttpContextAccessor服务,并且可以在GetProfileDataAsync中拉取标头值:

string tenantName = _httpContextAccessor.HttpContext.Request.Headers["X-Tenant"].SingleOrDefault();

希望这对希望实施租户特定声明检查的其他人有所帮助。

最新更新