使用 Keycloak 作为身份验证服务器访问资源服务器时的作用域与角色

时间:2021-02-02 20:55:29

标签: oauth-2.0 keycloak

我使用 Keycloak 作为授权服务器并设置将连接到 REST 服务(仅承载客户端/资源服务器)的 SPA(公共客户端)。

据我所知,范围是一组声明,声明是关于主题(经过身份验证的用户)的信息。范围在身份验证步骤传递给授权服务器,以便它提示用户允许/拒绝访问这些声明(用户数据/操作)。在第三方客户端尝试从 Facebook 访问数据的情况下,范围是用户授予客户端从 Facebook 访问用户数据的权限。在 Slack 范围的情况下,用于允许/拒绝第三方客户端代表用户执行操作的某些权限。

在我的情况下,资源服务器不保存任何用户信息,但 OAuth 用于身份验证/授权,并将使用访问令牌来获取用户组成员资格和可能的角色以允许/拒绝访问资源服务器上的数据.
如果我错了,请纠正我,但范围更多地用于用户以允许第三方客户端从 OIDC 提供商访问他/她的信息,可能从 ID 令牌获取用户信息。另一方面,在访问令牌中设置的角色/组将用于授权用户从资源服务器获取数据

例如这里是
访问令牌:

{
  "exp": 1612294865,
  "iat": 1612294565,
  "auth_time": 1612294524,
  "jti": "e6c12a30-1b54-410a-81ba-ffe947dcebc9",
  "iss": "http://localhost:8080/auth/realms/demo",
  "aud": "rest-service",
  "sub": "e49f2e27-4b47-492e-a714-2497d4f669f8",
  "typ": "Bearer",
  "azp": "js-console",
  "nonce": "58faa6b8-a628-4b5a-8f0a-b33643812ef2",
  "session_state": "2470b7b4-1587-43d5-8747-911b01398c3d",
  "acr": "0",
  "allowed-origins": [
    "http://localhost:8000"
  ],
  "resource_access": {
    "rest-service": {
      "roles": [
        "user"
      ]
    }
  },
  "scope": "openid email profile",
  "email_verified": false,
  "preferred_username": "test",
  "group": [
    "/my-group"
  ]
}

身份令牌

{
  "exp": 1612294865,
  "iat": 1612294565,
  "auth_time": 1612294524,
  "jti": "c3242eb4-9047-4913-9ac6-be3b4e2b5745",
  "iss": "http://localhost:8080/auth/realms/demo",
  "aud": "js-console",
  "sub": "e49f2e27-4b47-492e-a714-2497d4f669f8",
  "typ": "ID",
  "azp": "js-console",
  "nonce": "58faa6b8-a628-4b5a-8f0a-b33643812ef2",
  "session_state": "2470b7b4-1587-43d5-8747-911b01398c3d",
  "at_hash": "5hOJUzWD9H2DOuYCEnc6fQ",
  "acr": "0",
  "email_verified": false,
  "preferred_username": "test"
}

ID 令牌的受众(aud)设置为客户端(js-console)并仅返回一些用户信息,实际上只需要 openid 范围。访问令牌 aud 设置为其余服务,该服务将使用访问令牌并检索角色和组信息。

这是 OAuth 的一种不同用法,在这种情况下,用户不需要同意任何事情,而是会进行身份验证并使用访问令牌来获取基于组成员身份的信息。

我的理解是否正确?

谢谢!

0 个答案:

没有答案
相关问题