【发布时间】:2016-12-20 13:17:34
【问题描述】:
我正在使用 express 创建一个 JSON API,并且我正在使用带有 HTTP Bearer 策略的 Passport 进行身份验证。
我已将 passport.authenticate('bearer', {session: false}) 添加为中间件。但是,每当会话出现问题时,它只会以未授权主体和状态 401 进行响应。实际信息在 WWW-Authenticate 标头中,以挑战的形式出现,例如:
Bearer realm="Users", error="invalid_token", error_description="invalid token"
当没有给出身份验证令牌时:
Bearer realm="Users"
我想将响应更改为包含错误信息的 json。
由于我没有太多为后端编写东西的经验,因此我一直在阅读文档和代码。
Bearer strategy 只是调用失败,400 或挑战字符串。基本上这是我的问题开始的地方,因为我不想为这些挑战字符串编写解析器,为什么不将这些信息作为常规变量传递?
在Passport's authenticate middleware 中,根据您的配置,此挑战将传递给回调、req.flash、会话和/或 WWW-Authenticate 标头。查看这段代码,它首先尝试实际检索challenge.type 和challenge.message。当故障处理未委托给应用程序时,它会检查挑战是否是字符串,如果是,则将它们放入 WWW-Authenticate 标头中。这可能是承载策略将挑战作为字符串返回的原因?
所以也许就我而言,提供回调是有意义的,这样我就可以直接访问这些挑战?
但是,不记名的挑战仍然是需要解析的字符串?
人们没有对 JSON API 使用这种承载策略吗?
【问题讨论】:
标签: node.js authentication express bearer-token passport.js