从 NodeJS 登录 Keycloak:400 错误请求
Posted
技术标签:
【中文标题】从 NodeJS 登录 Keycloak:400 错误请求【英文标题】:Logging into Keycloak from NodeJS: 400 Bad Request 【发布时间】:2021-12-30 02:06:19 【问题描述】:我正在尝试从 NodeJS 代码登录 Keycloak,但我正在努力寻找工作示例。
https://www.keycloak.org/docs/latest/securing_apps/index.html#_nodejs_adapter 上的文档不完整,没有描述最重要的事情,即您如何实际登录。
我根据 keycloak 文档的基本信息和keycloak-nodejs-connect 的测试修改了我的示例:
"keycloak-connect": "15.0.2",
"express-session": "1.17.2",
const Keycloak = require('keycloak-connect');
const session = require('express-session');
const keycloakConfig =
serverUrl: "http://keycloak.intern/auth",
realm: "client-realm",
clientId: "test-client",
bearerOnly: true
const memoryStore = new session.MemoryStore();
const keycloak = new Keycloak(store: memoryStore, keycloakConfig)
async function loginUser(username, password)
return await keycloak.grantManager.obtainDirectly(username, password).then(grant =>
return grant
)
const main = async () =>
let grant = await loginUser('testuser@localhost.com', "test_password")
main().then(()=>
process.exit(0)
, (err)=>
console.error(err)
process.exit(1)
)
但是,我遇到了错误:
错误:400:错误请求
在服务器端,我看到了日志:
2021-11-19T10:16:49,312+01:00 WARN [org.keycloak.events](默认任务 56)type=LOGIN_ERROR,realmId=client-realm,clientId=test-client,userId=null, ipAddress=192.168.111.2222,error=not_allowed,auth_method=oauth_credentials,grant_type=password,client_auth_method=client-secret
因此调用了 keycloak API,但是,用户名不知何故没有正确给出。
方法的签名是OK的,它得到了用户名,它期望如何。
我在这里缺少什么?
【问题讨论】:
您要使用哪个流程? “我要登录”不是正确答案。 @JanGaraj 直接授权,类似于 Java 的 org.keycloak.admin.client.Keycloak.getInstance(...) 【参考方案1】:错误not_allowed
表示不允许直接授予。在test-client
Keycloak 客户端配置中启用Direct Access Grants Enabled
。
【讨论】:
以上是关于从 NodeJS 登录 Keycloak:400 错误请求的主要内容,如果未能解决你的问题,请参考以下文章
Keycloak-connect with express,有没有简单的Keycloak登录方法
如何验证从反应 SPA 中的 keycloak 检索的 nodejs express api 的访问令牌?