使用 HTTP 身份验证在服务器上使用基本身份验证测试 API



我正在为Web项目编写API。为了识别 API 用户,使用基本身份验证。为了测试API调用,我可以使用curl命令行工具并编写如下内容:

curl -H "Authorization: Basic Tm9TY1hETjRGNjIwZ1FwcTZOMENjMHczSjJDTjFlcnM6VmhWM21kUHF1MkIyMjFDaWRKVE4odyYmbyRpTEBsM0U=" http://example.com/api/function

在测试服务器上,我们有HTTP身份验证。我已经上传了具有 API 功能的脚本,现在我不明白如何在测试服务器上调用 API 函数。如何为 HTTP 身份验证提供用户名和密码,并在为 API 提供用户名和密码后提供用户名和密码?

基本上,您正在尝试使用相同的方法连续执行两个身份验证。这不是[此身份验证协议][1]涵盖的场景---因此简而言之,您无法使用标准设置。

协议无法满足这种情况的原因是标头冲突:第一个挑战将使用 WWW-Authenticate/Authorization 标头对,以及单个请求中的第二个挑战。

允许双重身份验证的一种方法需要更改(可能不允许你这样做):

    可以让第一个身份验证过程接受两对标头,
  • 针对第一对标头进行身份验证,然后重写第二个身份验证过程的标头。这对于测试环境来说应该没问题,前提是该环境不包含安全敏感数据,例如客户数据。否则绝对是一个坏主意。
  • 您可以将第一个身份验证过程替换为其他协议。例如,您可以停用该过程并需要SSH/VPN隧道才能访问计算机。然后,所有 HTTP 请求都可以通过隧道传输,它们只需要针对第二个进程进行身份验证。

最后一件事。我不知道这行不通:

curl --user "test:password" http://stan:uberflow@myserver.com

--user和 URL 中的凭据都使用基本身份验证,因此它们相互单步。这可能取决于实施;在我的环境中,--user优先。

[1]:我小心翼翼地避免使用安全协议,因为 HTTP 基本身份验证不是"非常"安全,而且它提供的 HTTPS 保护很差。

最新更新