我使用管理 UI 在最新的 Keycloak 版本中创建了一个新客户端和一个用户,并直接评估客户端范围。在生成的访问令牌中我们可以看到:
"iss": "..."
"aud": "account"
"sub": "..."
Run Code Online (Sandbox Code Playgroud)
我们可以通过“-dedicated”添加新的映射器来更改“aud”,但我们无法删除“account”项。为什么要添加这个?我们可以删除它吗?
该声明aud指的是当前代币的受众。换句话说,aud代表应该接受给定令牌的服务。
为什么要添加这个...?
在Keycloak中,默认情况下,声明aud已经包含对客户端的引用account。发生这种情况是因为默认情况下:
account,从而提供对 Keycloak 帐户控制台的访问。...我们可以删除它吗?
是的,关于第 1 点,如果您转到新客户端,切换到选项卡Client Scopes,单击范围<client-id>-dedicated,然后切换到选项卡Scope,您将看到以下内容:
您可以在此处关闭该Full scope allowed选项,然后手动添加应显示在令牌上的角色(通过使用菜单Assign role)。通过不包括与客户相关的任何角色account,您将(间接)排除索赔中对该客户的任何引用aud。但请记住,对此客户端的更改将影响所有使用它进行身份验证的用户。
另一个选项是关于第2点的,如果您转到用户,单击您的用户,然后切换到选项卡Role Mapping并取消选择该选项Hide inherited roles,您将看到以下内容:
正如您对新创建的用户所看到的,Keycloak 分配了客户端角色manage-account-links、manage-account和 等view-profile。这些角色是来自客户端的客户端角色account。您可以从用户取消分配它们,这将间接account从aud任何客户端向该用户省略的令牌的声明中排除客户端的任何引用。这是不可取的,因为通常希望用户访问 Keycloak 帐户控制台。
accountIMO,如果你真的想将其排除在观众之外,那么第一个选项就是第一个选项。
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |