在Keycloak中发布刷新令牌后撤消角色时,我遇到刷新访问令牌的问题 .

假设我有一个 jdoe 用户,该用户具有从 reporting 客户端分配的 view-reports 客户端角色 .

重现步骤:

  • 通过直接授予用户jdoe获取访问令牌以及刷新令牌

  • 在安全管理控制台中取消为用户分配视图报告角色 .

  • 刷新访问令牌

结果:不是接收具有有限角色的新访问令牌,而是返回以下错误:

{
  "error":"invalid_scope",
  "error_description":"User no long has permission for client role view-reports"
}

发生的情况是,在返回刷新的访问令牌之前,keycloak会将新创建的访问令牌中的角色与刷新令牌中的角色进行比较 . 当新创建的令牌中不存在刷新令牌中至少一个域/客户端角色时,将抛出invalid_scope错误(相应的代码可在此处找到:https://github.com/keycloak/keycloak/blob/master/services/src/main/java/org/keycloak/protocol/oidc/TokenManager.java#L590

我的问题是 - 这个检查真的是必要的吗?

刷新令牌是否应该包含任何访问信息(realm_access / resource_access)?

这不应该是可配置的吗?