Como definir o cabeçalho da autorização usando curl

397

Como passo o cabeçalho de autorização usando cURL? (executável em /usr/bin/curl).

Vidya
fonte

Respostas:

394

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

Consulte a parte 6. Autenticação HTTP

Autenticação HTTP

Autenticação HTTP é a capacidade de informar ao servidor seu nome de usuário e senha para verificar se você tem permissão para fazer a solicitação que está fazendo. A autenticação básica usada no HTTP (que é o tipo que o curl usa por padrão) é baseada em texto sem formatação , o que significa que envia nome de usuário e senha apenas ligeiramente ofuscados, mas ainda totalmente legíveis por qualquer pessoa que cheire a rede entre você e o servidor remoto.

Para dizer ao curl para usar um usuário e senha para autenticação:

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

O site pode exigir um método de autenticação diferente (verifique os cabeçalhos retornados pelo servidor) e, em seguida, --ntlm, --digest, --negotiate ou mesmo --anyauth podem ser opções adequadas para você.

Às vezes, seu acesso HTTP está disponível apenas através do uso de um proxy HTTP. Isso parece ser especialmente comum em várias empresas. Um proxy HTTP pode exigir seu próprio usuário e senha para permitir que o cliente acesse a Internet. Para especificar aqueles com ondulação, execute algo como:

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

Se o seu proxy exigir que a autenticação seja feita usando o método NTLM, use --proxy-ntlm, se precisar do Digest, use --proxy-digest.

Se você usar qualquer uma dessas opções de usuário + senha, mas deixar de fora a parte da senha, o curl solicitará a senha interativamente.

Observe que, quando um programa é executado, é possível ver seus parâmetros ao listar os processos em execução do sistema. Portanto, outros usuários poderão observar suas senhas se você as passar como opções simples de linha de comando. Existem maneiras de contornar isso.

Vale a pena notar que, embora seja assim que a Autenticação HTTP funciona, muitos sites não usam esse conceito quando fornecem logins etc. Consulte o capítulo Login na Web mais abaixo para obter mais detalhes.

Oli
fonte
16
@ Vixed Esta questão não é explicitamente sobre PHP. [O que há de errado com os resultados do Google]?
Oli
A pergunta é sobre autorização e não autenticação, então talvez o OP deva alterar o título da pergunta
atolamento em
320

Basta adicionar para não precisar clicar:

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

ou se você estiver tentando enviar autenticação para o OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
Tony
fonte
15
Muitas API agora usam tokens de autorização de cabeçalho. A -Hopção é ótima.
eliocs 23/11/12
14
Se você usar -u ou --user, o Curl codificará as credenciais em Base64 e produzirá um cabeçalho como este:-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski
Eu estou tentando adicionar um cabeçalho de autorização com HMAC-SHA256sempre recebendo um erro de falta de cabeçalho de autorização
Steven Aguilar
2
Além disso, se você precisa do <Base64EncodedCredentials>como mencionado por @ Timothy-Kansaki, você pode obter o codificado credencial usando o comando: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Para referência, consulte stackoverflow.com/questions/16918602/…
David Golembiowski
170

Os tokens do portador são assim:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
Steve Tauber
fonte
7
E se você estiver olhando para fazer a autorização 'Basic', apenas troca 'Portador' para 'Básico'
um darren
Eu tenho a coisa mais estranha, estou recebendo um "Formato errado do cabeçalho de autorização" e "HTTP-200". Então o servidor aceita minha autorização, mas o formato está errado?
Groostav 26/03
65

(para quem procura resposta 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);
Rao
fonte
64

Isso funcionou para mim:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
timj98
fonte
o que você está usando para o JWT?
ciasto Piekarz
11
Você não quer dizer Authorization: bearer xxxxxxxxx?
jlh
@jlh você quer dizerBearer
Daniel W.
Eu tinha quase certeza de que não diferencia maiúsculas de minúsculas, mas parece que estou errado. Sim, eu quis dizer Bearer.
jlh 4/03
20

Para autenticação básica HTTP:

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

substituir _your_token_e o URL.

Devaroop
fonte
Ao usar oauth, de onde viria o token de autorização? Estou tentando usar o curl para baixar arquivos de um site em que uso usuário e senha, mas parece estar falhando devido ao oauth2 em uso.
ctrl-alt-delete
@toasteez, você precisa passar pelo fluxo Oauth2 para receber um token. Normalmente, é um processo de duas etapas e deve ser detalhado na documentação do servidor.
Devaroop 8/09/16
13
boa resposta. um pequeno auxiliar echo -ne "<your-user>:<your-pass>" | base64 --wrap 0gerará o token de autenticação básico.
Mike D
3
@MikeD -H "Authorization: Basic <_your_token_>"faz o mesmo efeito que --user login:password. Você pode verificá-lo comcurl -v
vladkras
11
@vladkras minha resposta é uma ajuda para esta resposta. na minha experiência, é melhor entender como criar o token em vez de confiar no curl para gerá-lo.
Mike D
14

Cuidado ao usar: curl -H "Authorization: token_str" http://www.example.com

token_stre Authorizationdeve ser separado por espaço em branco, caso contrário, o lado do servidor não obterá o HTTP_AUTHORIZATIONambiente.

jianpx
fonte
2
Não é verdade, se um espaço em branco for necessário, seu servidor HTTP está quebrado. Além disso, você precisa de duas strings de um tipo e, em seguida, do token.
Alexis Wilke
5

Se você não tiver o token no momento da ligação, será necessário fazer duas chamadas, uma para obter o token e a outra para extrair o token da resposta, preste atenção

token grep | corte -d, -f1 | cut -d \ "-f4

pois é a parte que trata da extração do token da resposta.

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()

Após extrair o token, você pode usá-lo para fazer chamadas subseqüentes da seguinte maneira.

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 
Upul Doluweera
fonte