Estou procurando autenticar um usuário de um aplicativo cliente enquanto estiver usando a API da Web do ASP.NET . Eu assisti todos os vídeos no site e também li este post do fórum .
Colocar o [Authorize]
atributo corretamente retorna um 401 Unauthorized
status. No entanto, preciso saber como permitir que um usuário efetue login na API.
Desejo fornecer credenciais de usuário de um aplicativo Android para a API, fazer o login do usuário e ter todas as chamadas subseqüentes à API pré-autenticadas.
android
.net
authentication
asp.net-web-api
Mujtaba Hassan
fonte
fonte
Respostas:
Você precisa enviar um cookie válido de autenticação de formulários junto com a solicitação. Esse cookie geralmente é enviado pelo servidor ao se autenticar (
LogOn
ação) chamando o[FormsAuthentication.SetAuthCookie
método (consulte MSDN ).Portanto, o cliente precisa executar 2 etapas:
LogOn
ação enviando o nome de usuário e a senha. Por sua vez, essa ação chamará oFormsAuthentication.SetAuthCookie
método (caso as credenciais sejam válidas), que por sua vez definirá o cookie de autenticação de formulários na resposta.[Authorize]
ação protegida enviando o cookie de autenticação de formulários recuperado na primeira solicitação.Vamos dar um exemplo. Suponha que você tenha 2 controladores de API definidos no seu aplicativo da web:
O primeiro responsável pelo tratamento da autenticação:
e o segundo contendo ações protegidas que somente usuários autorizados podem ver:
Agora, poderíamos escrever um aplicativo cliente consumindo essa API. Aqui está um exemplo trivial de aplicativo de console (verifique se você instalou os pacotes
Microsoft.AspNet.WebApi.Client
eMicrosoft.Net.Http
NuGet):E aqui está como as 2 solicitações HTTP são exibidas:
Pedido de autenticação:
Resposta de autenticação:
Solicitação de dados protegidos:
Resposta para dados protegidos:
fonte
Tomo android como exemplo.
Atenção: i.localhost não pode ser usado. O dispositivo Android parece localhost como o próprio host. ii.Se implantar a API da web no IIS, a autenticação do formulário deverá ser aberta.
fonte
Use este código e acesse o banco de dados
fonte