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

在具有HTTP身份验证的服务器上使用基本身份验证测试API,api,authentication,http-authentication,Api,Authentication,Http Authentication,我正在为web项目编写API。为了识别API用户,使用了基本身份验证。为了测试API调用,我可以使用curl命令行工具编写如下代码: curl -H "Authorization: Basic Tm9TY1hETjRGNjIwZ1FwcTZOMENjMHczSjJDTjFlcnM6VmhWM21kUHF1MkIyMjFDaWRKVE4odyYmbyRpTEBsM0U=" http://example.com/api/function 在测试服务器上,我们有HTTP身份验证。我已经上传了带有AP

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

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

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

基本上,您尝试使用相同的方法在一行中执行两个身份验证。这不是[This authentication protocol][1]所涵盖的场景,因此简而言之,您不能使用标准设置

协议无法满足这种情况的原因是头冲突:第一个挑战将使用WWW身份验证/授权头对,以及单个请求中的第二个挑战

允许双重身份验证的一种方法需要进行可能不允许您进行的更改:

您可以让第一个身份验证过程接受两对头,根据第一对头进行身份验证,然后为第二个身份验证过程重写头。如果测试环境不包含任何安全敏感数据,例如客户数据,那么这对于测试环境来说应该是很好的。否则绝对是个坏主意。 您可以用不同的协议替换第一个身份验证过程。例如,您可以停用该进程,并需要SSH/VPN隧道来访问该机器。然后,所有HTTP请求都可以通过隧道传输,它们只需要针对第二个进程进行身份验证。 最后一件事。我不知道这是行不通的:

curl --user "test:password" http://stan:uberflow@myserver.com
URL中的-user和凭据都使用基本身份验证,因此它们相互踩在一起。这可能取决于实施情况;在我的环境中-用户具有优先权


[1] :我谨慎地避免说安全协议,因为HTTP基本身份验证是安全协议,它提供的保护比HTTPS差。

请注意,cURL可以为您做更多的工作。请查看-user选项,以避免自己手工制作base 64标头。至于你的问题,我认为你不能,但如果我错了,我会很感激的。问题是关于双重身份验证。。。您可以将测试服务器更改为只接受隧道通信吗?那就不需要HTTP认证了…@EricPlaton嗨。谢谢你的回答。关于-user选项呢,我试过了,但收到了错误!eUz-774SB%jD!g$8cJnG:未找到事件。我想这是因为API凭证中的特殊字符。下面是一个密码和用户名示例:kJKh4VpY4El8OKSE529gPn7doOP485wk:y58pspmFQAD!eUz-774SB%jD!g$8cJnG有没有办法处理带有特殊字符的凭据?您的shell可能正在解释字符。用双引号括起来怎么样?例如-用户用户名:密码,或单引号(如果需要)。