node.js - 如何获取 Passport.js 认证策略的错误信息?
问题描述
passport.js 的 Authenticate 方法是使用指定的身份验证策略进行身份验证。
它应该像文档中的示例一样简单:
app.post('/login',
passport.authenticate('local'),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.redirect('/users/' + req.user.username);
});
特别是我正在尝试使用wsfed-saml2 策略来连接 ADFS 服务器:
router.post('callbackPath',
passport.authenticate('wsfed-saml2', {
failureFlash: true,
failureRedirect: 'somePath'
}),
function onSuccessfulAuthentication(req, res, next) {
res.redirect('/')
})
在我的情况下,策略未能成功授权。但是,服务器正在正确发送带有经过身份验证的用户数据的 XML。似乎该策略无法解析它。
有没有办法从执行的策略中获取详细的错误消息?此时唯一发生的事情是错误重定向。
配置略有不同,我得到了以下堆栈跟踪:
TypeError: req.flash is not a function
at allFailed (C:\inetpub\wwwroot\webapi\node_modules\passport\lib\middleware\authenticate.js:131:15)
at attempt (C:\inetpub\wwwroot\webapi\node_modules\passport\lib\middleware\authenticate.js:180:28)
at WsFedSaml2Strategy.strategy.fail (C:\inetpub\wwwroot\webapi\node_modules\passport\lib\middleware\authenticate.js:297:9)
at C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\strategy.js:225:32
at C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\samlp.js:363:20
at Samlp.ignoreValidationFunction (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\samlp.js:30:10)
at C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\samlp.js:343:12
at Samlp.ignoreValidationFunction (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\samlp.js:30:10)
at Samlp.validateSamlResponse (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\samlp.js:338:10)
at loaded (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\strategy.js:224:21)
at NullStore.verify (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\state\null.js:9:3)
at verifyState (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\strategy.js:158:26)
at executeSamlp (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\strategy.js:244:7)
at WsFedSaml2Strategy.authenticate (C:\inetpub\wwwroot\webapi\node_modules\passport-wsfed-saml2\lib\passport-wsfed-saml2\strategy.js:289:5)
at attempt (C:\inetpub\wwwroot\webapi\node_modules\passport\lib\middleware\authenticate.js:361:16)
at authenticate (C:\inetpub\wwwroot\webapi\node_modules\passport\lib\middleware\authenticate.js:362:7)
at Layer.handle [as handle_request] (C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\layer.js:95:5)
at next (C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\layer.js:95:5)
at C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\inetpub\wwwroot\webapi\node_modules\express\lib\router\index.js:335:12)
但它也没有说明响应到底有什么问题。它只是表明 wsfed-saml2 策略的响应在某种程度上是不可接受的。
当护照的策略失败时,如何获得更详细的错误消息?
解决方案
推荐阅读
- java - 在 N 嵌套列表中查找元素并按特定属性删除
- c# - 在 c# 中使用 xunit 和模拟 Web API 进行单元测试-Put 方法不起作用
- flutter - Flutter Provider:MaterialApp.router 依赖于 provider
- mysql - 如何为具有 1 个类别但没有另一个类别的联系人实现 MySQL 'NOT EXISTS' 查询
- pdf - 如何使用 R 将 Excel 工作簿保存为 PDF?
- postgresql - 如何使用 JPA Criteria API 调用函数?
- java - Spring,Postgresql:在 Postgres 中显示一个 oid 以在 spring 中成像
- javascript - SVG Circle 不会在 viewBox ract native 中居中
- jenkins - Jenkins 流水线脚本编辑器的问题
- python - 如何设置这个程序想法?:通过查找最小值和最大值以及它们之间的关系,在股票图表上找到艾略特波浪计数器