keycloak-connect调用enforce报invalid_client_credentials错误求助
修复步骤
1. 补全Keycloak实例初始化配置
你当前代码未传入后端bearer-only客户端的配置,导致keycloak-connect无法完成服务端交互的身份校验。将你从Keycloak后台导出的客户端json配置文件引入项目,修改初始化逻辑:
var express = require('express'); var session = require('express-session'); var Keycloak = require('keycloak-connect'); // 引入你导出的bearer-only客户端配置文件 var kcConfig = require('./keycloak.json'); var memoryStore = new session.MemoryStore(); // 第二个参数传入客户端配置 var keycloak = new Keycloak({ store: memoryStore }, kcConfig); // 其余代码保持不变
2. 角色校验用protect而非enforce
enforce是Keycloak细粒度授权服务专用接口,需要额外开启客户端的Authorization功能、配置客户端密钥才能使用,仅做角色校验用protect即可。
注意protect的角色匹配规则:
- 校验Realm级角色:
keycloak.protect('realm:my-role') - 校验当前后端客户端专属角色:
keycloak.protect('你的后端客户端ID:my-role')
修改你的路由代码:
// 移除enforce的路由,保留或修改为protect即可 app.get('/check', keycloak.protect('realm:user'), function(req, res){ console.log(req.headers); res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ 'this': 'works!' }, null, 3)); });
3. 可选:如需使用enforce接口的处理方式
如果确实需要用到细粒度权限校验,进入Keycloak后台的后端客户端配置页,开启Authorization开关,保存后重新导出配置文件,新的配置文件会自动包含credentials.secret字段,引入后即可正常调用enforce接口。
内容的提问来源于stack exchange,提问作者Sébastien
相关产品推荐
相关产品推荐

