gpt4 book ai didi

node.js - 使用 keycloak-nodejs-connect 时出错 - "Cannot exchange code for grant in bearer-only mode"

转载 作者:行者123 更新时间:2023-12-05 07:25:52 25 4
gpt4 key购买 nike

我正在尝试使用 keycloak-nodejs-connector 实现针对 Keycloak 进行身份验证并使用外部 IDP 的 Node.js 客户端应用程序。我一直在关注位于 here 的文档使用它。

但是,在身份验证之后,客户端应用程序抛出错误:“无法在仅承载模式下交换代码以授予授权”。这让我感到困惑,因为客户端没有配置为仅承载模式,而是配置为 secret 模式。

客户端应用程序成功将我重定向到我可以登录的外部 IDP。如果我查看 Keycloak 管理控制台,我也会在登录后看到自己的事件 session 。但是,客户端应用程序仍然抛出错误。

这是我从 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,它正在获取上述客户端配置详细信息。

最佳答案

我遇到了同样的问题。我发现在构建 Keycloak 实例时,您必须设置 cookies=true,或者传入一个 session 存储。所以其中之一:

const session = require('express-session');
const store = new session.MemoryStore();
const keycloakMiddleware = new Keycloak({ idpHint: 'SSO', store });

const keycloakMiddleware = new Keycloak({ idpHint: 'SSO', cookies: true });

如果您选择后者,您还需要使用 cookie-parser 或类似的工具。据我所知,无论哪种方式,您都需要使用快速 session 。

app.use(require('cookie-parser')); // only if using cookies=true, i think
app.use(session({ secret }));
app.use(keycloakMiddleware.middleware());

关于node.js - 使用 keycloak-nodejs-connect 时出错 - "Cannot exchange code for grant in bearer-only mode",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54680422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com