3

我正在编写一个快速应用程序,我必须使用 oauth 2.0 流对用户进行身份验证。我已成功将用户重定向到 oauth 提供者,并且提供者在 oauth 回调中发送访问令牌。就像是

http://localhost:4000/oauth/callback#access_token=<token>

现在我有一个快速路由处理程序,例如

app.get('/oauth/callback', function(req, res, next) {
});

我知道哈希片段没有传递给服务器,但这是一个 oauth 回调。

如何在路由处理程序中获取 url 哈希片段?

4

2 回答 2

4

URL 包含access_token参数。这意味着您使用了Implicit Flow。在隐式流中,参数必须嵌入到片段部分中。该行为不是 OAuth 服务器的错误。

如果要通过查询部分接收参数,则必须使用Authorization Code Flow

此外,如果 OAuth 服务器支持OAuth 2.0 Form Post Response ModePOST ,您的重定向端点可以通过添加response_mode=form_post到您的授权请求来接收数据作为请求。该规范类似于 trodrigues 描述的想法。

下表显示了“ response_type/ response_mode”和“HTTP 状态/数据位置”之间的关系。

在此处输入图像描述

有关授权端点响应格式的详细信息,请参阅Authlete权威指南中的“响应格式” 。

于 2015-11-12T23:22:45.000 回答
0

我为 Contentful 工作。

不幸的是,目前这是我们的 OAuth 回调的工作方式,我们不发回查询字符串参数。我已经提到并讨论了这个问题,我们会在某个时候解决这个问题,但我们现在还没有确切的时间框架。

您目前可以做的最好的事情是从您的 express 应用程序中提供一个纯 HTML 页面,该页面具有一些 javascript,可以从 window.location.hash 中提取令牌,然后向您的 /oauth/callback?access_token=token 发出请求端点。

于 2015-11-12T10:20:01.287 回答