策略未检查客户端声明



我们有一个使用C#Core 2.1、IdentityServer4和Identity对用户进行身份验证的系统。其他各种项目都使用该系统进行授权。我可以在我的API中创建策略来检查用户声明;并利用这些政策来保护资源。我在API Sartup.cs:中添加了类似的代码

services.AddAuthorization(options =>
{
options.AddPolicy("example",
policy => policy.RequireClaim("claim", "data"));
});

在我的API控制器或特定任务之前添加以下代码:

[Authorize(policy: "example")]

我们已经使用这个系统很长时间了。现在我们想锁定一个操作,这样只有特定的客户端(而不是他们的用户(才能执行。但是,通过授权类型client_credentials获得的声明要么没有添加到访问令牌中,要么授权服务看不到。

当令牌没有openid作为作用域时,有没有一种方法可以查看令牌中的声明?

假设索赔存在,为什么授权服务无法看到它?

还有其他选择吗?我们想锁定一个动作,这样只有客户端应用程序自己才能完成。

首先,您可以使用Fiddler捕获原始令牌,以查看实际传递给令牌接收者的声明。然后检查身份验证处理程序创建的User(ClaimsPrincipal(中包含的声明。

然后,您需要显式映射/添加丢失的声明,以便预期的声明进入claimsPrincipalUser对象。默认情况下,在该过程中会删除某些索赔。

为了补充这个答案,我写了一篇更详细的博客文章关于本主题:调试ASP.NET Core 中的OpenID Connect声明问题

相关内容

  • 没有找到相关文章

最新更新