在 express 应用程序中解析 url 哈希片段

Parse url hash fragment in express application

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

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

现在我有一个像

这样的快速路由处理程序
app.get('/oauth/callback', function(req, res, next) {
});

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

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

我为 Contentful 工作。

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

您目前可以做的最好的事情是从您的 Express 应用程序提供一个普通的 HTML 页面,其中包含一些 javascript 将从 window.location.hash 中提取令牌,然后向您的 /oauth/callback?access_token=令牌端点发出请求。

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

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

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

下面的table显示了“response_type/response_mode”和“HTTP status/data位置”之间的关系。

见“Response Format" in Authlete's Definitive Guide for details about the response format of authorization endpoint.