KEYCLOAK:请求中未提供客户端密钥

5

Keycloak JS 版本 -> ^10.0.2

Angular 版本 -> ^7.2.16

keycloak.json

{
  "realm": "REALM",
  "auth-server-url": "<auth-url>/auth/",
  "ssl-required": "external",
  "resource": "CLIENT_ID",
  "verify-token-audience": true,
  "credentials": {
    "secret": "CLIENT_SECRET_KEY"
  },
  "use-resource-role-mappings": true,
  "confidential-port": 0,
  "policy-enforcer": {}
}

使用类似这样的init

const keycloakAuth = Keycloak('keycloak.json');
keycloakAuth.init({ onLoad: 'login-required', checkLoginIframe: false })

当Keycloak发起此调用<auth-url>/auth/realms/guavus/protocol/openid-connect/token时,会给出以下错误:

{"error":"unauthorized_client","error_description":"Client secret not provided in request"}

根据文档,Javascript适配器已删除凭据支持。

那么,这个问题的替代方案是什么,如何解决这个错误?


你能从PostMan获取Token吗? - Subodh Joshi
这很可能是一些Javascript应用程序。它是单页应用程序(如Angular,React)还是服务器端应用程序(nodejs等)? - Codo
2个回答

9
如果这是一个Angular单页应用程序(SPA),根据Keycloak文档,您应该使用公共客户端(不会使用客户端密钥):
“关于使用客户端应用程序的一个重要事项是,客户端必须是公共客户端,因为在客户端应用程序中没有安全的方法来存储客户端凭据。” https://www.keycloak.org/docs/latest/securing_apps/#_javascript_adapter

3

谢谢。我的客户端一开始是设置为保密的..现在变成公开了! - raujonas
那么,如果我们必须使用公共客户端,如何检查用户在Keycloak中拥有哪些资源权限呢?因为公共客户端不支持Keycloak授权资源。 - PrestonDocks
@PrestonDocks 我也有同样的问题。你找到方法了吗?如果有,请分享给我。 - Padmakar Kasture

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接