我正在尝试使用 keycloak-nodejs-connector 实现对 Keycloak 进行身份验证的 Node.js 客户端应用程序,并使用外部 IDP。我一直在关注此处的文档以使用它。
但是,在进行身份验证后,客户端应用程序会抛出错误:“Cannot exchange code for grant in bearer-only mode”。这让我很困惑,因为客户端没有配置为仅承载模式,而是配置为机密模式。
客户端应用程序成功地将我重定向到我可以登录的外部 IDP。如果我查看 Keycloak 管理控制台,我还会在登录后看到自己的活动会话。但是,客户端应用程序仍然抛出错误。
这是我从 Keycloak 管理控制台中提取的客户端配置:
{
"realm": "master",
"auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "local",
"verify-token-audience": true,
"credentials": {
"secret": "redacted"
},
"use-resource-role-mappings": true,
"confidential-port": 0
}
这是我的 app.js 文件中针对 Node 的实现:
var Keycloak = require('keycloak-connect');
let keycloakMiddleware = new Keycloak({idpHint: 'SSO'});
app.use( keycloakMiddleware.middleware() );
app.get( '/', keycloakMiddleware.protect(), complaintHandler);
我在与 app.js 相同的目录中有 keycloak.json,它正在获取上述客户端配置详细信息。