【问题标题】:Client Claims not being checked by Policy政策未检查客户索赔
【发布时间】:2020-08-07 00:37:08
【问题描述】:

我们有一个使用 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 作为范围时,有没有办法可以查看令牌中的声明?

假设声明存在,为什么授权服务看不到它?

还有其他选择吗?我们希望锁定一个操作,以便只有客户端应用程序本身可以执行此操作。

【问题讨论】:

    标签: c# asp.net-identity identityserver4


    【解决方案1】:

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

    然后您需要显式映射/添加缺少的声明,以便预期的声明进入 claimPrincipal 用户对象。默认情况下,在该过程中会删除一些声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2019-01-01
      相关资源
      最近更新 更多