gpt4 book ai didi

node.js - 使用 Okta OIDC 中间件时获取 "Error: state mismatch, could not find a state in the session"

转载 作者:行者123 更新时间:2023-12-03 12:14:59 24 4
gpt4 key购买 nike

我们正在为我们的 Web 应用程序设置 Okta oidc 中间件。

有效的是,当我们没有登录时,我们被重定向到 Okta,然后在提供有效凭据后我们被重定向回我们的回调处理程序。在本地测试时,回调接收验证码,我们被重定向到回调后路径。

然而,在我们部署的登台服务器上,回调接收代码但返回 401。

这是当前开放的类似问题:https://github.com/okta/okta-oidc-js/issues/207

可能与此有关,也可能无关,尽管错误消息相同,但所描述的情况并不完全相同。

有没有人对问题可能是什么或如何提高日志记录的详细程度有任何想法?

我不认为这是由于登录重定向 URI 的配置错误造成的。我们已经添加了必要的路径。

我们 Express 设置中的 Okta 配置是这样的:

const MemoryStore = require('memorystore')(session);
app.use(
session({
store: new MemoryStore({
checkPeriod: 86400000,
}),
secret: process.env.OKTA_SESSION_SECRET,
resave: true,
saveUninitialized: false,
cookie: {
maxAge: 30 * 60 * 1000,
httpOnly: false,
},
})
);

const orgUrl = process.env.OKTA_ORG_URL;
const oidc = new ExpressOIDC({
appBaseUrl: process.env.OKTA_APP_BASE_URL,
issuer: `${orgUrl}/oauth2/default`,
client_id: process.env.OKTA_CLIENT_ID,
client_secret: process.env.OKTA_CLIENT_SECRET,
scope: 'openid profile',
routes: {
login: {
path: `${APP_ROOT}/login`,
},
loginCallback: {
path: `${APP_ROOT}/authorization-callback`,
afterCallback: APP_ROOT,
},
},
});
app.use(oidc.router);

这是服务器日志中弹出的错误:
Error: state mismatch, could not find a state in the session, this is likely an environment setup issue, loaded session: undefined
at callback.then.catch (/usr/src/app/node_modules/openid-client/lib/passport_strategy.js:169:20)
at <anonymous>
at runMicrotasksCallback (internal/process/next_tick.js:121:5)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)

最佳答案

为了防止 CSRF 攻击,OAUTH 2.0 期望客户端生成一个随机“状态”,将其存储在 session 中,并将其作为参数发送到您的 IdP 到身份验证端点。

当 IdP 返回响应时,它会回显客户端发送的相同状态。
如果它们不同,则拒绝验证。

您的问题似乎表明此状态参数未正确存储在客户端的 session 中。

也许您有多个 Node 后端实例,但没有粘性 session ?在这种情况下,在 session 中存储状态的实例可能与从 IdP 取回响应回调的实例不同。

关于node.js - 使用 Okta OIDC 中间件时获取 "Error: state mismatch, could not find a state in the session",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57874974/

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