我有一个受 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."
}
答案 0 :(得分:0)
在您的场景中,keycloak-js 将向 Keycloak 查询具有受众/客户端 blog_gui
的访问令牌。这个客户端是公共的,所以它不是注册的资源服务器。
您可能希望执行 token exchange 以获取后端客户端 (blog_api
) 的访问令牌,并使用获取的令牌查询 uma-policy 端点。您可以在 Authorization Services docs over here 中找到有关如何查询端点的其他信息。
确保您的 blog_api
客户端是机密的并且已开启 Authorization Enabled
。您可以参考 this documentation 了解如何相应地设置客户端。