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

ava*_*ika 3 keycloak keycloak-services

keycloak js 版本 -> ^10.0.2

角度 -> ^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": {}
}
Run Code Online (Sandbox Code Playgroud)

像这样在 init 中使用

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

当 keycloak 发出此调用而<auth-url>/auth/realms/guavus/protocol/openid-connect/token不是给出此错误时。

{"error":"unauthorized_client","error_description":"请求中未提供客户端密码"}

根据文档,从 javascript 适配器中删除了凭证支持

比这有什么替代方法以及如何解决此错误?

小智 5

如果这是一个 Angular 单页应用程序 (SPA),您应该根据 Keycloak 文档使用公共客户端(不会使用客户端机密):

“关于使用客户端应用程序需要注意的一件重要事情是客户端必须是公共客户端,因为没有安全的方式将客户端凭据存储在客户端应用程序中。” https://www.keycloak.org/docs/latest/securing_apps/#_javascript_adapter