HttpListener: como obter http usuário e senha?
-
18-09-2019 - |
Pergunta
Eu estou enfrentando um problema aqui, com HttpListener.
Quando uma solicitação do formulário
http://user:password@example.com/
é feita, como posso obter o usuário e senha? HttpWebRequest tem uma propriedade Credenciais, mas HttpListenerRequest não tem isso, e eu não encontrou o nome de usuário em qualquer propriedade do mesmo.
Obrigado pela ajuda.
Solução
O que você está tentando fazer é credenciais passagem via HTTP autenticação básica, eu não tenho certeza se o nome de usuário: sintaxe password é suportado no HttpListener, mas se for, você vai precisar para especificar que você aceita autenticação básica em primeiro lugar.
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uriPrefix);
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
Depois de receber um pedido, então você pode extrair o nome de usuário e senha com:
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
Aqui está uma explicação completa de todos os métodos authenitcation suportados que pode ser usado com HttpListener.
Outras dicas
Obter o cabeçalho Authorization
. formate-o de é a seguinte
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
Exemplo:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
O nome de utilizador e senha é separada e vírgula (neste exemplo, Aladdin:open sesame
), em seguida, B64-codificado.
Você precisa primeiro habilitar a autenticação básica:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
Em seguida, em seu método ProcessRequest você poderia começar nome de usuário e senha:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}