我正在编写一个快速应用程序,我必须使用oauth 2.0流程对用户进行身份验证。我已成功将用户重定向到oauth提供程序,并且提供程序在oauth回调中发送访问令牌。像
这样的东西http://localhost:4000/oauth/callback#access_token=<token>
现在我有一个像
这样的快速路线处理程序app.get('/oauth/callback', function(req, res, next) {
});
我知道哈希片段没有传递给服务器,但这是一个oauth回调。
如何在路由处理程序中获取url哈希片段?
答案 0 :(得分:4)
网址包含access_token
参数。这意味着您已使用Implicit Flow。在Implicit Flow中,参数必须嵌入片段部分。该行为不是OAuth服务器的错误。
如果您想通过查询部分接收参数,则必须使用Authorization Code Flow。
此外,如果OAuth服务器支持OAuth 2.0 Form Post Response Mode,您的重定向终端可以通过向您的授权请求添加POST
作为response_mode=form_post
请求来接收数据。该规范类似于trodrigues描述的想法。
下表显示了&#34; response_type
/ response_mode
&#34;之间的关系。和&#34; HTTP状态/数据位置&#34;。
参见&#34; Response Format&#34;有关Authlete的响应格式的详细信息,请访问Definitive Guide authorization endpoint。
答案 1 :(得分:0)
我为Contentful工作。
不幸的是,目前这是我们的OAuth回调的工作方式,我们不会发送回查询字符串参数。我已经提到并讨论了这个问题,我们会在某个时候解决这个问题,但目前我们没有确切的时间框架。
目前你可以做的最好的事情是从你的快递应用程序提供一个纯HTML页面,它有一些javascript,它将从window.location.hash中提取令牌,然后向你的/ oauth / callback发出请求? access_token =令牌端点。