如何使用curl设置授权标头


Answers:


394

http://curl.haxx.se/docs/httpscripting.html

请参阅第6部分。HTTP身份验证

HTTP认证

HTTP身份验证可以告诉服务器您的用户名和密码,以便可以验证是否允许您执行正在执行的请求。HTTP中使用的基本身份验证(默认为curl所使用的类型)是基于 文本的,这意味着它发送的用户名和密码仅略微被混淆,但是嗅探您与远程服务器之间网络的任何人仍然可以完全读取。

告诉curl使用用户和密码进行身份验证:

curl --user name:password http://www.example.com

该站点可能需要其他身份验证方法(检查服务器返回的标头),然后--ntlm,--digest,--negotiate甚至--anyauth可能是适合您的选项。

有时,您只能通过使用HTTP代理来访问HTTP。这似乎在各种公司中尤为常见。HTTP代理可能需要其自己的用户名和密码,以允许客户端访问Internet。要指定带有curl的对象,请运行以下命令:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

如果您的代理要求使用NTLM方法进行身份验证,请使用--proxy-ntlm,如果它需要摘要使用--proxy-digest。

如果您使用这些user + password选项中的任何一个,但忽略了密码部分,curl将交互提示输入密码。

请注意,在运行程序时,列出系统正在运行的进程时可能会看到其参数。因此,如果您将其他密码作为普通的命令行选项传递给其他用户,则他们可能会看到您的密码。有一些方法可以避免这种情况。

值得注意的是,虽然这是HTTP身份验证的工作方式,但许多网站在提供登录名等时将不会使用此概念。有关此内容的更多详细信息,请参见下面的“ Web登录”一章。


16
@Vixed这个问题显然不是关于PHP的。[Google的结果怎么了?
奥利

问题是关于授权而不是认证,因此OP应该更改问题的标题
Jam

320

只需添加即可,您无需点击即可:

curl --user name:password http://www.example.com

或者,如果您尝试发送OAuth 2的身份验证:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
现在许多API使用标头授权令牌。这个-H选项很棒。
eliocs 2012年

14
如果您使用-u或--user,则Curl会将凭据编码为Base64并生成如下标头:-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski 2016年

我正在尝试添加授权标头,但HMAC-SHA256总是会得到缺少授权标头的错误
Steven Aguilar

2
另外,如果您需要<Base64EncodedCredentials>@ timothy-kansaki所提到的,则可以使用以下命令获取编码的凭证:cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com。仅供参考,请参阅stackoverflow.com/questions/16918602/...
大卫Golembiowski

170

承载令牌看起来像这样:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
如果你正在寻找做的“基本”的授权,只是交换“承载”为“基本”
一个达伦-

我得到了最奇怪的东西,我得到了“授权标头格式错误”和“ HTTP-200”。因此服务器接受我的授权,但是格式错误?
Groostav

64

(对于那些正在寻找php-curl答案的人)

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

64

这为我工作:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

您在JWT中使用什么?
Ciasto piekarz

1
不是Authorization: bearer xxxxxxxxx
jlh

@jlh,您的意思是Bearer
Daniel W.

我几乎可以确定它是不区分大小写的,但是似乎我错了。是的,我的意思是Bearer
jlh

20

对于HTTP基本身份验证:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

替换_your_token_和URL。


使用oauth时,授权令牌来自何处?我正在尝试使用curl从使用用户名和密码的站点下载文件,但是由于使用了oauth2,因此似乎失败了。
ctrl-alt-

@toasteez,您必须通过Oauth2流程才能接收令牌。通常这是一个两步过程,应在服务器文档中进行详细说明。
Devaroop

13
好答案。一个小的助手echo -ne "<your-user>:<your-pass>" | base64 --wrap 0将生成基本的身份验证令牌。
Mike D

3
@MikeD的-H "Authorization: Basic <_your_token_>"作用与相同--user login:password。您可以通过curl -v
vladkras

1
@vladkras我的回复是此答案的帮助者。以我的经验,最好是了解如何创建令牌,而不是依赖curl来生成令牌。
Mike D

14

使用时请注意: curl -H "Authorization: token_str" http://www.example.com

token_str并且Authorization必须用空格隔开,否则服务器端将无法获得HTTP_AUTHORIZATION环境。


2
不正确,如果需要空格,则您的HTTP服务器已损坏。另外,您需要两个字符串分别是类型和令牌。
Alexis Wilke

5

如果在进行呼叫时没有令牌,则必须进行两次呼叫,一个要获取令牌,而另一个要从响应中提取令牌,请注意

grep令牌| 切-d,-f1 | 切-d \“ -f4

因为这是处理从响应中提取令牌的部分。

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

提取令牌后,您可以使用令牌进行后续调用,如下所示。

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.