首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用keycloak-nodejs-connect时出错-“无法在仅承载模式下交换授权代码”

使用keycloak-nodejs-connect时出错-“无法在仅承载模式下交换授权代码”
EN

Stack Overflow用户
提问于 2019-02-14 06:27:31
回答 1查看 495关注 0票数 3

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

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

客户端应用程序成功地将我重定向到我能够登录的外部IDP。如果我查看Keycloak管理控制台,我还会在登录后看到自己的活动会话。但是,客户端应用程序仍会抛出错误。

以下是我从Keycloak管理控制台中提取的客户端配置:

代码语言:javascript
复制
{
"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的实现:

代码语言:javascript
复制
 var Keycloak = require('keycloak-connect');

 let keycloakMiddleware = new Keycloak({idpHint: 'SSO'});

 app.use( keycloakMiddleware.middleware() );

 app.get( '/', keycloakMiddleware.protect(), complaintHandler);

我在与app.js相同的目录中有keycloak.json,它正在获取上面的客户端配置详细信息。

EN

回答 1

Stack Overflow用户

发布于 2021-07-23 00:31:07

我遇到了同样的问题。我想的是,在构造Keycloak实例时,您必须设置cookies=true,或者传入会话存储。因此,其中之一:

代码语言:javascript
复制
const session = require('express-session');
const store = new session.MemoryStore();
const keycloakMiddleware = new Keycloak({ idpHint: 'SSO', store });

代码语言:javascript
复制
const keycloakMiddleware = new Keycloak({ idpHint: 'SSO', cookies: true });

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

代码语言:javascript
复制
app.use(require('cookie-parser')); // only if using cookies=true, i think
app.use(session({ secret }));
app.use(keycloakMiddleware.middleware());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54680422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档