【发布时间】:2014-10-05 22:07:55
【问题描述】:
我有一个关于在使用 passport-saml 进行身份验证时注销用户的正确方法的问题。
带有 passport-saml 的示例脚本显示注销如下:
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
据我所知,这将结束本地护照会话,但似乎不会向 SAML IdP 发送注销请求。当用户再次登录时,它会重定向到 IdP,但会立即使用经过身份验证的用户重定向回来。有没有办法使用 IdP 注销,以便用户在登录我的网站时必须再次输入密码?我见过使用我们的 IdP 的其他网站这样做,所以我认为这是可能的。
我在 passport-saml 代码中注意到,在 passport-saml 策略对象上有一个 logout() 方法,req.logout() 似乎没有调用该方法。所以我尝试将代码切换为:
app.get('/logout', function(req, res) {
//strategy is a ref to passport-saml Strategy instance
strategy.logout(req, function(){
req.logout();
res.redirect('/');
});
});
但是我在 XMLNode.js 深处得到了这个错误
Error: Could not create any elements with: [object Object]
at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:74:15)
at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:54:25)
at XMLElement.module.exports.XMLNode.element (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLNode.js:54:25)
at new XMLBuilder (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/XMLBuilder.js:27:19)
at Object.module.exports.create (/.../node_modules/passport-saml/node_modules/xmlbuilder/lib/index.js:11:12)
at SAML.generateLogoutRequest (/.../node_modules/passport-saml/lib/passport-saml/saml.js:169:21)
我没有正确调用这个方法吗?还是我不应该直接调用这个方法,而是调用其他方法?
我在generateLogoutRequest() 中看到它指的是req.user 上的两个我不确定是否存在的属性:
'saml:NameID' : {
'@Format': req.user.nameIDFormat,
'#text': req.user.nameID
}
如果这些属性不存在,会导致此错误吗?如果是这样,我假设我可能需要确保将这些属性添加到从验证回调函数返回的用户对象中?
感谢任何人对此提供的任何帮助。
【问题讨论】:
标签: node.js passport.js saml-2.0