Este tópico tem sido incrivelmente confuso para mim. Sou iniciante em aplicativos HTTP, mas preciso desenvolver um cliente do iPhone que consuma dados JSON de algum lugar. Eu escolhi a Web API da MS porque parecia bastante fácil, mas quando se trata de autenticar usuários, as coisas ficam bastante frustrantes.
Surpreende-me como não consegui encontrar um exemplo claro de como autenticar um usuário desde a tela de login até usar o Authorize
atributo nos meus ApiController
métodos após várias horas pesquisando no Google.
Esta não é uma pergunta, mas uma solicitação de um exemplo de como fazer isso exatamente. Eu olhei para as seguintes páginas:
Embora eles expliquem como lidar com solicitações não autorizadas, elas não demonstram claramente algo parecido com LoginController
algo assim para solicitar credenciais do usuário e validá-las.
Alguém disposto a escrever um bom exemplo simples ou me indicar a direção certa, por favor?
Obrigado.
fonte
Respostas:
Isso ocorre porque você está ficando confuso com esses dois conceitos:
A autenticação é o mecanismo pelo qual os sistemas podem identificar com segurança seus usuários. Os sistemas de autenticação fornecem respostas para as perguntas:
Autorização é o mecanismo pelo qual um sistema determina qual nível de acesso um usuário autenticado específico deve ter para proteger recursos controlados pelo sistema. Por exemplo, um sistema de gerenciamento de banco de dados pode ser projetado para fornecer a certos indivíduos especificados a capacidade de recuperar informações de um banco de dados, mas não a capacidade de alterar dados armazenados no banco de dados, enquanto oferece a outros indivíduos a capacidade de alterar dados. Os sistemas de autorização fornecem respostas para as perguntas:
O
Authorize
atributo no MVC é usado para aplicar regras de acesso, por exemplo:A regra acima permitirá que apenas usuários nas funções de administrador e superusuário acessem o método
Essas regras também podem ser definidas no arquivo web.config, usando o
location
elemento Exemplo:No entanto, antes que essas regras de autorização sejam executadas, você deve estar autenticado no site atual .
A partir daqui, poderíamos dividir o problema em dois:
Autenticar usuários ao consumir os serviços de API da Web no mesmo aplicativo da Web
Essa seria a abordagem mais simples, porque você confiaria na autenticação no ASP.Net
Este é um exemplo simples:
Web.config
Os usuários serão redirecionados para a rota da conta / login , onde você processaria controles personalizados para solicitar credenciais do usuário e, em seguida, você definiria o cookie de autenticação usando:
Autenticação multiplataforma
Nesse caso, você estaria apenas expondo os serviços de API da Web no aplicativo Web; portanto, você teria outro cliente consumindo os serviços, o cliente poderia ser outro aplicativo da Web ou qualquer aplicativo .Net (Win Forms, WPF, console, serviço do Windows, etc)
Por exemplo, suponha que você consumirá o serviço de API da Web de outro aplicativo Web no mesmo domínio de rede (dentro de uma intranet); nesse caso, você poderá confiar na autenticação do Windows fornecida pelo ASP.Net.
Se seus serviços estiverem expostos na Internet, você precisará passar os tokens autenticados para cada serviço de API da Web.
Para mais informações, consulte os seguintes artigos:
http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
fonte
Se você deseja se autenticar com um nome de usuário e senha e sem um cookie de autorização , o atributo MVC4 Authorize não funcionará imediatamente . No entanto, você pode adicionar o seguinte método auxiliar ao seu controlador para aceitar cabeçalhos de autenticação básica. Chame desde o início dos métodos do seu controlador.
Do lado do cliente, esse auxiliar cria um
HttpClient
com o cabeçalho de autenticação no lugar:fonte
Estou trabalhando em um projeto de MVC5 / API da Web e precisava obter autorização para os métodos da API da Web. Quando minha exibição de índice é carregada pela primeira vez, faço uma chamada para o método da API da Web 'token' que acredito ser criado automaticamente.
O código do lado do cliente (CoffeeScript) para obter o token é:
Se for bem-sucedido, o seguinte é chamado, o que salva o token de autenticação localmente:
Então, se eu precisar fazer uma chamada do Ajax para um método de API da Web que tenha a tag [Authorize], basta adicionar o seguinte cabeçalho à minha chamada do Ajax:
fonte
response.access_token
vem. Você está definindo isso a partir do código c # ..?