如何使用公共客户端发出的令牌查询 keycloak 资源权限

时间:2021-07-21 07:45:41

标签: node.js security keycloak

我有一个受 keycloak 保护的前端 Javascript 客户端。前端应用程序的 Keycloak 客户端的类型为 Public,名为 blog_gui

我还有一个 API,它由一个名为“blog_api”的 Confidential 客户端保护,并启用了 Authorization

当我从前端应用程序向 API 发出请求时,我将 keycloak 从 public 客户端 (blog_gui) 发出的 JWT 作为请求标头中的不记名令牌发送。

在 API 中,我想检查发送 JWT 的前端应用程序是否有权访问特定资源。因此,我通过以下 URL 向 keycloak 服务器发送请求,包括来自前端应用程序的 JWT 作为不记名令牌

http://${host}:${post}/auth/realms/${realm}/authz/protection/uma-policy

我从keycloak得到的结果是

{
    "error": "invalid_clientId",
    "error_description": "Client application [blog_gui] is not registered as a resource server."
}

1 个答案:

答案 0 :(得分:0)

在您的场景中,keycloak-js 将向 Keycloak 查询具有受众/客户端 blog_gui 的访问令牌。这个客户端是公共的,所以它不是注册的资源服务器。 您可能希望执行 token exchange 以获取后端客户端 (blog_api) 的访问令牌,并使用获取的令牌查询 uma-policy 端点。您可以在 Authorization Services docs over here 中找到有关如何查询端点的其他信息。

确保您的 blog_api 客户端是机密的并且已开启 Authorization Enabled。您可以参考 this documentation 了解如何相应地设置客户端。