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.

Foi útil?

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top