Oauth 2.0 生成令牌时忽略无效作用域

Oauth 2.0 生成令牌时忽略无效作用域,oauth-2.0,keycloak,keycloak-rest-api,Oauth 2.0,Keycloak,Keycloak Rest Api,我们正在将KeyClope设置从6.0.1升级到11.0.0,从KeyClope 10开始,如果scope参数无效,令牌生成会出现错误“invalid scope” 最初,我们在RBAC(用户和分配给他们的角色)和全作用域客户端(仅启用直接访问授权=true)中使用KeyClope 3。在我们在作用域中传递所需角色并用于获取请求角色(作用域中)的访问令牌的情况下,这种方式工作得很好后来我们将其更新为Key斗篷6,该设置也可以正常工作,但是将其更新为Key斗篷11会破坏它,因为我们不使用细粒度的作

我们正在将KeyClope设置从6.0.1升级到11.0.0,从KeyClope 10开始,如果scope参数无效,令牌生成会出现错误“invalid scope”

最初,我们在RBAC(用户和分配给他们的角色)和全作用域客户端(仅启用直接访问授权=true)中使用KeyClope 3。在我们在作用域中传递所需角色并用于获取请求角色(作用域中)的访问令牌的情况下,这种方式工作得很好后来我们将其更新为Key斗篷6,该设置也可以正常工作,但是将其更新为Key斗篷11会破坏它,因为我们不使用细粒度的作用域,所以将现有角色传递给作用域会破坏它,但是如果我不提供任何作用域,那么它可以正常工作

我的设置如下所示

角色:

  • 角色1
  • 角色2
  • 角色3
用户:

  • 用户1
  • 用户2
用户角色映射

  • 角色1,角色2-->用户1
  • 角色3-->用户2
客户

  • 客户1 访问类型:共标识 直接访问授权:已启用 作用域:全作用域
生成的令牌

{
  "exp": 1598869296,
  "iat": 1598867496,
  "jti": "b5cd4395-1ba2-471b-9e3f-86fa7c699d72",
  "iss": "http://localhost:8480/auth/realms/EDP",
  "aud": "account",
  "sub": "2efa51cd-1afb-4f18-83c4-12e4017739b5",
  "typ": "Bearer",
  "azp": "service",
  "session_state": "a4925385-b787-4ae7-a076-a4b92b5df87c",
  "acr": "1",
  "realm_access": {
    "roles": [
      "Rol1",
      "offline_access",
      "uma_authorization",
      "Rol2"
    ]
  },
  "resource_access": {
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "default roles",
  "unique_name": "User1",
  "preferred_username": "User1",
  "tid": "Foo"
}

如果作用域参数无效,您所说的“令牌生成抱怨错误”是什么意思?哪个组件会投诉?你说的是哪个范围参数?你能举个例子吗?您能否提供更多关于您的组件、客户端和配置的信息,以尝试评估影响?请注意,OAuth2作用域不是一个可以轻易绕过的选项,但它们的使用可能会受到很大限制(因为规范并没有真正强制作用域)。我不会假装回答你的问题,但如果没有更多信息,肯定没有人会回答。@bsaverino为迟到的回答道歉,我已经更新了问题谢谢更新。到目前为止有三个问题:(1)如果您在请求令牌时在scopes参数中指定“openid”、“您的客户端id”并最终指定一个角色,该怎么办?(这行得通吗?)。(2) 您从令牌端点得到的响应是什么?(哪一个错误?还有钥匙斗篷日志?)。(3) 当不指定作用域时(您说它有效),检索到的令牌是什么样子的?(你能展示它的内容吗?@bsaverino我没有理解你的观点#1但对于#3我得到了正确的回答,用Same更新了问题你所说的“如果范围参数无效,令牌生成投诉错误“无效范围”是什么意思”?哪个组件会投诉?你说的是哪个范围参数?你能举个例子吗?您能否提供更多关于您的组件、客户端和配置的信息,以尝试评估影响?请注意,OAuth2作用域不是一个可以轻易绕过的选项,但它们的使用可能会受到很大限制(因为规范并没有真正强制作用域)。我不会假装回答你的问题,但如果没有更多信息,肯定没有人会回答。@bsaverino为迟到的回答道歉,我已经更新了问题谢谢更新。到目前为止有三个问题:(1)如果您在请求令牌时在scopes参数中指定“openid”、“您的客户端id”并最终指定一个角色,该怎么办?(这行得通吗?)。(2) 您从令牌端点得到的响应是什么?(哪一个错误?还有钥匙斗篷日志?)。(3) 当不指定作用域时(您说它有效),检索到的令牌是什么样子的?(你能展示它的内容吗?@bsaverino我没有理解你的观点#1但对于#3我得到了正确的回答,用同样的方法更新了问题