【发布时间】:2017-06-03 09:22:01
【问题描述】:
我正在接收来自我们正在使用的 API (Adobe Sign API) 的回调。唯一可用于验证这些回调的方法是 HTTP Basic Auth,使用 URL encoding(不是标头)。
文档:
callbackInfo(字符串,可选):每次有新协议事件时 Adobe Sign 都会对其执行 HTTP GET 操作的可公开访问的 URL。使用标准嵌入式语法支持 HTTP 身份验证 - 即http://username:password@your.server.com/path/to/file。
如何访问 URL 的 username:password@ 部分以验证凭据? Request 对象似乎无法使用它(我将整个对象转储到 console.error() 并且在其中的任何地方都找不到凭据)。 :(
我正在使用 Express 4.14.0、npm 3.10.8 和 Node.js 7.0.0(如果有帮助,我可以升级到新版本)。
很遗憾,Adobe Sign 支持根本没有帮助。
编辑:我已经支持 HTTP 基本身份验证标头 (Authorization),但在此未提供打回来。使用标头的请求使用用户名显示在我的 nginx 访问日志中,但回调不显示任何用户名(这是有道理的,因为标头不存在)。唯一可用的凭据位于 URL 的 username:password@ 部分。我什至不知道这是可能的,but apparently it's part of the URL RFC,并且今天仍然支持(参见3.1. Common Internet Scheme Syntax 部分)。我实际上只是收到一个根本没有标头的简单 GET 请求。类似https://adobesign:verysecurepassword@myservice.com/callbacks。
对于失败的身份验证,我将返回一个 401 响应,并将 WWW-Authenticate 标头设置为 Basic,但在这种情况下它没有帮助(只会让浏览器提示输入用户名/密码,但不影响回调)。
【问题讨论】:
-
可能想看看这个gist.github.com/charlesdaniel/1686663。看起来很有希望。
-
@realseanp 那是使用
authorization标头,这很容易实现,但在这种情况下没有帮助(标头不存在;username:password作为网址) -
HTTP 协议仅在标头中发送基本身份验证
user:pass。您是否发送WWW-Authenticate标头以请求回调 url?当第一个请求以 HTTP 401 响应时,回调 url 可能会再次使用授权标头进行 ping。试试这个 stackoverflow.com/a/33905671/1921546 只有 url afterhost:port的部分在标头之前发送。如果您确定这部分有user:pass,请检查其查询参数。 -
@pii_ke 不正确;查看我更新中的 URL RFC。我还发送了
WWW-Authenticate标头,但这对回调没有帮助。user:pass也不在查询参数或 Request 对象的任何其他元素中。 -
实际上,@pii_ke 你是对的(见下面的答案)。当我在我这边测试时,
username:password@作为标题发送。所以我现在真的不知道 Adobe Sign 出了什么问题。 :(
标签: node.js express url-encoding basic-authentication