node.js - 由于回调 url,护照 saml 注销不起作用
问题描述
我正在使用护照 saml 从 IDP 注销这是我的代码:
module.exports = function logout(app, samlStrategy, config) {
app.get('/logout', (req, res) => {
const { webUser } = req;
const { role, nameID } = webUser || {};
if (role === ROLENAME_WEB_USER && nameID) {
samlStrategy.logout(req, (err, requestUrl) => {
// redirect to the IdP with the SAML logout request
console.log(`req url is is:${requestUrl}`);
res.redirect(requestUrl);
});
} else {
res.redirect(LOGGED_OUT_URL);
}
});
app.post(config.externalSSO.logoutCallbackPath, (req, res) => {
// console.log('SAML logout callback:');
// console.log(req);
res.redirect(LOGGED_OUT_URL);
});
};
这是我的护照 saml 配置:
loginPath: process.env.EXTERNAL_SSO_LOGIN_PATH,
callbackUrl: process.env.BASE_ADDRESS + process.env.EXTERNAL_SSO_CALLBACK_PATH,
callbackPath: process.env.EXTERNAL_SSO_CALLBACK_PATH,
logoutUrl: process.env.EXTERNAL_SSO_LOGOUT_URL,
// logoutCallbackPath: '/logout/external/callback',
logoutCallbackUrl: process.env.EXTERNAL_SSO_LOGOUT_URL,
metadataPath: `${process.env.EXTERNAL_SSO_LOGIN_PATH}/metadata`,
entryPoint: process.env.EXTERNAL_SSO_ENTRYPOINT,
issuer: process.env.EXTERNAL_SSO_ISSUER,
idpPublicCert: process.env.EXTERNAL_SSO_IDP_CERT,
spPrivateCert: process.env.EXTERNAL_SSO_SP_SIGNING_PRIVATE_KEY,
decryptionPvk: process.env.EXTERNAL_SSO_SP_DECRYPTION_PRIVATE_KEY,
decryptionCert: process.env.EXTERNAL_SSO_SP_DECRYPTION_PUBLIC_KEY,
authnRequestBinding: process.env.EXTERNAL_SSO_AUTHN_REQUEST_BINDING,
问题是我试图摆脱上面代码中的第二个 api 调用,因为重定向到 LOGGED_OUT_URL 停止了我的 SLO 进程,所以我更改并部署在 dev env 上,我得到了这个异常:
{"error":{"message":"Not found"}}
有线的事情是仍然将我重定向到 logoutCallbackPath url!
解决方案
问题是由于 generateServiceProviderMetadata(decryptionCert, signingCert) 方法中存在一些问题,因此护照没有更新 sp 元数据。所以我更新了证书并想出了如何重新生成它。
推荐阅读
- c# - 如何更改保存输出日期的路径?它只保存在表单位置
- reactjs - 将类型作为特异性选择器所需的 CSS 空定义(React 中的材质 UI)
- amazon-web-services - 无法从 Windows 10 SSH 到 Amazon Linux 实例。我将 EC2Tutorial.pem 保存在我的桌面上。请建议
- javascript - 如何使用创建嵌套的子 html和 HTML 中的 JavaScript 或 jQuery?
- firebase - 在 Cloud Firestore 中的顶级集合和子集合之间有一个桥接文档有什么真正的缺点吗?
- python - Pandas python相关问题而不是排序
- node-red - 如何在linux上设置Node Red log文件?
- r - 更新存储在变量中的数据框名称的函数
- bash - 如果我必须通过 bash 脚本运行应用程序,如何在控制台上打印 Scala 变量(在 scala 对象中)?
- java - WAS Liberty:ClassNotFoundException:[Ljava.lang.String