Keycloak 用户授权 openid-protocol Rest API

Keycloak user authorization openid-protocol Rest API

我是 keycloak 的新手。 我已经创建了门户网站,用户的身份验证(登录、注销、忘记密码)是在后端(PHP)使用 REST Api 完成的。身份验证成功后,允许用户进入门户的安全部分。 我无法获取 REST API 端点,因此当用户登录时,我想获取该用户拥有的权限列表,这样我就可以使用特定用户拥有权限的功能来呈现 UI到。到目前为止,我找到了只能请求特定权限的端点

curl -X POST   http://$URL/auth/realms/argo/protocol/openid-connect/token  -H "Authorization: Bearer $TOKEN" --data "audience=$CLIENTID"  --data "permission=$PERMISSIONNAME#$PERMISSIONSCOPE"

这可以用 keycloak 实现吗?我可能会有大约 10 个导航功能,有些是付费的,所以一旦用户购买了这个功能,我们就会允许这个特定用户获得这个权限。

谢谢

我花了很多时间让它发挥作用。 基本上,一旦用户登录(通过 JWT 访问令牌),您的应用程序必须向 OIDC 端点发出 额外 调用,以便 获得扩展的 JWT令牌(包括细粒度权限).

下面是这个额外调用的详细信息:

POST http://server:port/auth/realms/<realm>/protocol/openid-connect/token

Content-Type: application/x-www-form-urlencoded

Authorization: "Bearer ....." (=access token of logged-in user)

Parameters:
- grant_type: the constant "urn:ietf:params:oauth:grant-type:uma-ticket"
- audience : the keycloak client id
- response_include_resource_name: true

您将得到一个应该被解码的 JWT 令牌作为响应

  • 以编程方式(非常简单)
  • 或通过调用 Keycloak 令牌自省端点(即 /auth/realms//protocol/openid-connect/token/introspect

而且,一旦解码,您会注意到 json 有效载荷包含一个额外的“授权”节点。