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 的另一种用法,在这种情况下,用户不需要同意任何事情,但会进行身份验证并使用访问令牌来获取基于组成员身份的信息。
我的理解正确吗?
谢谢!
解决方案
推荐阅读
- c# - Sentinel HASP 为 64 位 DLL 返回 NoApiDylib
- windows-10-iot-core - Windows IoT Core 恢复 - 管理员密码
- c# - 为什么程序指向错误的路径?
- r - 将参数传递给函数内的子集
- python - 如何定义方法以充当 Python 中同一类中其他方法的装饰器?
- svg - 沿路径从上到下反转textPath字母而不重绘?
- python - 更新 Django
- git - 如何恢复对 git 分支的最后一次推送?
- java - 如何获取 JTextField 的真实 x 和 y 坐标
- reactjs - 如何在使用反应应用程序中的工作箱安装服务工作者时预缓存散列文件(/build/static)