从 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登录方法

如果 keycloak 会话过期,我如何重定向到登录页面?

如何验证从反应 SPA 中的 keycloak 检索的 nodejs express api 的访问令牌?

如何将角度应用程序从keycloak登录重定向到特定路线

尝试使用 Java API 在 Red Hat SSO 7.3 (Keycloak) 上重置用户密码时出现错误 400

NodeJS + Keycloak 没有快递