Você pode passar usuário / senha para autenticação básica HTTP nos parâmetros de URL?


153

Eu acredito que isso não é possível, mas alguém que eu conheço insistiu que funcionasse. Nem sei quais parâmetros tentar e não encontrei esse documento em nenhum lugar.

Eu tentei http://myserver.com/~user=username&password=mypassword, mas não funciona.

Você pode confirmar que não é realmente possível passar o usuário / passar por parâmetros HTTP (GET ou POST)?



@sam - o que? Como seria o URL completo?
precisa saber é o seguinte

4
Tudo na especificação ietf.org/rfc/rfc1738.txt (3.1)
Smudge 21/03

@ sam - Desculpe, mas não consegui analisar o seu comentário por algum motivo.
precisa saber é o seguinte

Respostas:


200

De fato, não é possível passar o nome de usuário e a senha por meio de parâmetros de consulta na autenticação HTTP padrão. Em vez disso, você usa um formato de URL especial, assim: http://username:password@example.com/- envia as credenciais no cabeçalho HTTP "Autorização" padrão.

É possível que quem você estava falando estivesse pensando em um módulo ou código personalizado que examinou os parâmetros da consulta e verificou as credenciais. Porém, isso não é autenticação HTTP padrão, é algo específico de um aplicativo.


1
Obrigado, é exatamente isso que eu estava procurando ... não é crítico que sejam parâmetros GET, apenas que eu possa criar isso na URL.
precisa saber é o seguinte

42
Para sua informação, o http://username:password@example.comformato não é mais suportado pelo IE ou pelo Chrome ; não ficaria surpreso se outros seguissem o exemplo, se ainda não o fizeram.
usar o seguinte

11
Na verdade, funciona bem no Chrome. Apenas o IE está sendo um pirralho mimado.
precisa saber é o seguinte

1
@DamienOvereem em qual versão do Chrome você está? eu estou em mac os x 37 e não parece trabalhar para mim
Chris Damour

11
Desde então, soube que o Chrome o desativou por um tempo, mas reativou esse recurso posteriormente. Eu também aprendi que o Safari irá lançar erros de phishing ao executar para estes tipos de ligações .. Basicamente, o tempo de autenticação http-base url é mais ..
Damien Overeemツ

18

Passagem de parâmetros de autenticação básica no URL não recomendado

Existe um campo de cabeçalho de autorização para esse fim, verifique aqui: lista de cabeçalhos http

Como usá-lo está escrito aqui: Autenticação básica de acesso

Lá, você também pode ler que, apesar de ainda ser suportado por alguns navegadores, a solução sugerida para adicionar credenciais de autorização básica no URL não é recomendada.

Leia também o capítulo 4.1 da RFC 2617 - Autenticação HTTP para obter mais detalhes sobre por que NÃO usar a autenticação básica.


Passando parâmetros de autenticação na string de consulta

Ao usar o OAuth ou outros serviços de autenticação, também é possível enviar seu token de acesso em uma sequência de consultas em vez de em um cabeçalho de autorização, algo como:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

E como se codifica um cabeçalho de autorização em um URL?
Womble

2
Não é que o formulário que você declarou agora está obsoleto?
Womble

2
A pergunta que você respondeu com "Existe um campo de cabeçalho de autorização para esse fim" estava perguntando como colocar parâmetros de autenticação no URL . Se você não pode codificar os campos do cabeçalho HTTP em um URL (o que você não pode), sua resposta é não sequitur.
Womble

Você pode citar onde no padrão URI diz que a transmissão de parâmetros básicos de autenticação no URI está obsoleta? O RFC 2396 diz apenas que "NÃO É RECOMENDADO" porque os detalhes da autenticação em texto sem formatação não são, em muitas circunstâncias, uma boa ideia (da qual concordo), enquanto o RFC 7235 não menciona nada. Em nenhum lugar nas especificações que posso pesquisar diz que está obsoleto.
Lie Ryan

1
@ Wilt: Eu tenho que me desculpar, você está realmente correto. Sua dica de que a especificação foi "alterada" me instigou a investigar mais (uma RFC nunca é modificada depois de publicada / numerada). Acabei de descobrir que a RFC 2396 foi realmente substituída pela RFC 3986 , que não consegui encontrar anteriormente. O RFC 3986 menciona a descontinuação do nome de usuário: sintaxe da senha:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan

17

http: // nome do usuário: senha@exemplo.com funcionará no FireFox, Chrome e Safari, mas não no IE.

Base de Conhecimento Microsoft


2
Esse recurso foi removido do Chrome 19+. Consulte code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz

4
Pela minha leitura desse relatório de bug, ele foi adicionado novamente ao Chrome 20. Certamente, eu esperaria ver muitas reclamações continuadas, se não tivesse sido.
Womble

Agora eu solicitei para o Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/… . Caso de uso ligeiramente diferente, mas aborda o mesmo problema;)
SimonSimCity 16/05

@Diago se a senha contiver '@', não funcionará. dá erro fatal, alguém pode me dizer como podemos dar nome de usuário e senha de uma só vez
Ashish Jain

@ AshishJain - eu tentaria escapar do @na senha como %40. (Não sei se isso funciona, porém, e pode depender do servidor ou combinação de navegador / servidor.)
David Moles

0

É (obviamente) possível enviar qualquer string nos parâmetros GET, embora não seja recomendado o envio de login e senha, pois podem torná-lo altamente visível, especialmente se não estiver em uma solicitação AJAX.

No entanto, você precisará codificar a página do servidor para extrair o login e a senha, validá-los e usá-los da maneira que for necessária.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.