Autenticação e Autorização numa Aplicação Web API através de uma aplicação Cliente ASP.NET MVC



Documentos relacionados
Aplicação ASP.NET MVC Cliente de Aplicação Web API

Aplicação ASP.NET MVC Cliente de Aplicação Web API (com Class Library)

Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API

Criação de uma aplicação Web ASP.NET MVC 4

Aplicação MVC com Class Library

1. Base de Dados criada automaticamente pelo Entity Framework. 2. Correspondência entre classes da aplicação Asp.Net e tabelas da base de dados

Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile)

REST. Representational State Transfer. É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades.

Aula07 Forms Authentication

Classe PHP Client. A classe Zend\Http\Client fornece uma interface para realizar pedidos HTTP.

Integração por Web Services

VALIDAÇÃO DE DADOS COM O PADRÃO MVC

Laboratório 3 Controllers

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 4 PROF. EMILIO PARMEGIANI

Login Google. Copie a SSL URL, que no meu caso é

Bem vindos ao Curso de ASP.NET MVC 3 Razor e C#

1 handshake 2 consulta 3 alterausuario

COMO CRIAR UM APLICATIVO UNIVERSAL WINDOWS PLATFORM CONSUMINDO WEB SERVICE ASP.NET WEB API

Login. Criar um novo website File > New > WebSite Framework 4.5 Visual C# ASP.NET Empty Web Site Nome do projeto: WebLogin

Serviço de Cópia e Impressão: Como instalar

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Exercício de Estrutura de dados. Java Fila

LAB 7 Cookies e Sessões em PHP

Criação de uma aplicação Web ASP.NET MVC usando Code First

Para baixá-lo entre no site : Selecione a aba Downloads ; Clique no link: Microsoft Visual C# Express 2010; Por meio desse

Manual de Integração SMS

ASP.NET Web Services. José Antônio da Cunha IFRN

Many-to-many. Mapear no Context Na classe Context.cs, dentro do método OnModelCreating, adicionar o trecho

2.1 URL Introdução ao roteamento Criação de uma rota Parâmetros esperados pelo ASP.NET MVC... 30

PROCEDIMENTOS DE NEGÓCIO E TÉCNICO PARA FUNCIONAMENTO DO PROCESSO DE LIQUIDAÇÃO EM D+2

Construindo Aplicações com ASP.NET MVC 2.0 Aula 03 Luiz Alberto Ferreira Gomes. Ciência da Computação da PUC Minas

PRDS C#.Net Alexandre L. Silva

LAB 10 Programação com o framework CodeIgniter [parte 2]

POO Programação Orientada a Objetos

PUSH WEB SERVER HTTP GATEWAY. Versão 1.0

Manual FPO 22-Jan-2007 Actualizado em 03-Fev-2015

Fintecc SDK Documentation

Linguagem de Programação II Implementação

LAB 8 em PHP. 1. Assume-se neste lab que concluiu com sucesso o LAB7. Copie todos os ficheiros da pasta LAB7 para a pasta LAB8.

PROJETOS EXEMPLO DE ASP.NET MVC

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Web Services Novembro de 2011

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Login. Criar uma pasta Repositories na raiz do projeto. Criar uma classe Funcoes.cs dentro da pasta Repositories.

Programação Estruturada e Orientada a Objetos

Login Facebook. Continuação do passo-a-passo Login Google

Tutorial de Aplicação Simples usando Web Forms e MySQL. Luiz Eduardo Guarino de Vasconcelos

Ambiente Administrador

WebAPI. Comente o bloco system.data e entityframework (caso existam) no web.config

Simulado de Linguagem de Programação Java

Macros e Programação VBA

Configurando uma aplicação Struts

Coletando dados utilizando a API do Zabbix com PHP e JSON

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.


PROGRAMAÇÃO ORIENTADA A OBJETOS I. Prof. Me. Hélio Esperidião

Exercícios de fixação: Listas

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

2 Criar uma Enterprise Application que num módulo EJB irá conter um ou vários Beans.

GUIA DE AJUDA LOGIN REGISTO

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Acesso padrão de fábrica Nome de usuário: admin Senha: admin Você pode alterar o endereço de rede do gateway acessando o menu Network;

Figura 1 - Acesso às propriedades da placa de rede sem fios

Developing ASP.NET MVC 5 Web Applications (20486)

Estruturas de controle Parte 1

Associação 1:1. Baseado no Diagrama de Classe a seguir, iremos criar as classes de Modelagem que compõem a Associação de Piloto com Carro.

API olx.com.br. Utilizando o protocolo OAuth 2.0

Visual Studio.NET - C# Parte 2 Windows Forms e Web Services

Idiomas de Programação

Aula 06 Usando controles em ASP.NET

Handson Cisco IOS VPN. (Guião CE1 - Parte 2)

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

Verifique a Conectividade do servidor Radius com comando dos radius AAA do teste

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Guia e Utilização do Visual Studio.NET 2003

Aula 06 Classe Net.Mail

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Procedimentos para configuração do DWL-2100AP em modo Access Point

Programação de CPLDs no ambiente ISE 4.2i da Xilinx

Ulisses Universidade de Lisboa

Manual de Procedimentos de Acesso VPN Versão 3.2

3.1-Criar BD e Tabelas.

Documentação referente à rede sem fios eduroam da ESTBarreiro/IPS

Guia de configuração para acesso à rede sem fios EDUROAM. Windows 7

Boas práticas com Orientação a Objetos. Paulo Silveira

# Documentação API Astandes. # Geral. Autenticação. Código de status das mesagens

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Design Patterns (Factory Method, Prototype, Singleton)

Diagramas Sintáticos

Construindo Aplicações com ASP.NET MVC 2.0 Aula 01 Luiz Alberto Ferreira Gomes. Ciência da Computação da PUC Minas

Manual de Configuração. Rede Wireless. Configuração. Windows. (8,7, Vista e XP)

Índice MANUAL DE UTILIZAÇÃO BALCÃO DIGITAL CGI

Lists. Aproveitando o projeto WebLogin, vamos ver como implementar alguns componentes de lista (DropDownList, RadioButtonList e CheckBoxList).

DISTRIBUINDO SUA APLICAÇÃO

Consulta de endereço através do Cep

Sage API Application Programming Interface.

Transcrição:

Autenticação e Autorização numa Aplicação Web API através de uma aplicação Cliente ASP.NET MVC Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2 http:www.asp.net/web-api/overview/security/individual-accounts-in-web-api 1. Criar a aplicação ASP.NET Web API Visual Studio 2015 > File > New Project > Web > ASP.NET Web Application Name: WebApiAuth OK ASP.NET 4.6 Templates: Web API Authentication: Individual User Accounts OK 1.1. Executar a aplicação Copiar o url base da aplicação http:localhost:xxxxx/ 2. Criar a Aplicação ASP.NET MVC (Cliente da Aplicação Web API 2) Criar outra Solução Visual Studio com uma Aplicação Web MVC 5, cliente da Web API 2 (usando HttpClient) Visual Studio 2015 > File > New Project > Web > ASP.NET Web Application Name: ClienteMvcAuth OK ASP.NET 4.6 Templates: MVC Authentication: Individual User Accounts OK 2.1. Criar uma pasta Helpers para conter a classe de acesso à Web API ClienteMvcAuth> botão direito do rato: Add > New Folder > Helpers Helpers > botão direito do rato: Add > Class > Name: WebApiHttpClient.cs Add using System; using System.Net.Http; namespace ClienteMvcAuth.Helpers public static class WebApiHttpClient public const string WebApiBaseAddress = "http:localhost:1742/"; public static HttpClient GetClient() HttpClient client = new HttpClient(); client.baseaddress = new Uri(WebApiBaseAddress); client.defaultrequestheaders.accept.clear(); client.defaultrequestheaders.accept.add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); return client;

Necessário mudar a localização do serviço Web API na constante WebApiBaseAddress. Configurámos no objeto HttpClient: a propriedade BaseAddress com o endereço do serviço Web API a propriedade DefaultRequestHeaders para que o formato da resposta do serviço seja apenas o formato JSON. Começámos por fazer Clear() e depois adicionámos o formato "application/json" 3. Método Post Register de AccountController Inicial: POST: /Account/Register public async Task<ActionResult> Register(RegisterViewModel model) if (ModelState.IsValid) var user = new ApplicationUser UserName = model.email, Email = model.email ; var result = await UserManager.CreateAsync(user, model.password); if (result.succeeded) await SignInManager.SignInAsync(user, ispersistent:false, rememberbrowser:false); return RedirectToAction("Index", "Home"); AddErrors(result); If we got this far, something failed, redisplay form Alterar para: POST: /Account/Register public async Task<ActionResult> Register(RegisterViewModel model) if (ModelState.IsValid)

var data = new Email = model.email, Password = model.password, ConfirmPassword = model.password ; try var client = WebApiHttpClient.GetClient(); string datajson = JsonConvert.SerializeObject(data); HttpContent content = new StringContent(dataJSON, System.Text.Encoding.Unicode, "application/json"); var response = await client.postasync("api/account/register", content); if (response.issuccessstatuscode) return RedirectToAction("Index", "Home"); else return Content("Ocorreu um erro: " + response.statuscode); catch return Content("Ocorreu um erro."); If we got this far, something failed, redisplay form 3.1. Testar o Registo de um utilizador Executar a aplicação Web API (WebApiAuth). Copiar o endereço base do serviço e colocar na classe helper WebApiHttpClient da aplicação Cliente MVC (ClienteMvcAuth). Executar a aplicação Cliente MVC (ClienteMvcAuth). Clicar no botão Register e registar um utilizador. Verificar se o utilizador ficou registado na tabela AspNetUsers da base de dados da aplicação Web API. 4. Método Post Login de AccountController Inicial: POST: /Account/Login public async Task<ActionResult> Login(LoginViewModel model, string returnurl) if (!ModelState.IsValid)

This doesn't count login failures towards account lockout To enable password failures to trigger account lockout, change to shouldlockout: true var result = await SignInManager.PasswordSignInAsync(model.Email, model.password, model.rememberme, shouldlockout: false); switch (result) case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new ReturnUrl = returnurl, RememberMe = model.rememberme ); case SignInStatus.Failure: default: ModelState.AddModelError("", "Invalid login attempt."); Alterar para: POST: /Account/Login public async Task<ActionResult> Login(LoginViewModel model, string returnurl) if (!ModelState.IsValid) try var client = WebApiHttpClient.GetClient(); string username = model.email; string password = model.password; HttpContent content = new StringContent( "grant_type=password&username=" + username + "&password=" + password, System.Text.Encoding.UTF8, "application/x-www-form-urlencoded"); var response = await client.postasync("/token", content); if (response.issuccessstatuscode) TokenResponse tokenresponse = await response.content.readasasync<tokenresponse>(); WebApiHttpClient.storeToken(tokenResponse); return Content(tokenResponse.AccessToken); return RedirectToAction("Index", "Home"); else return Content("Ocorreu um erro: " + response.statuscode); catch return Content("Ocorreu um erro.");

Na pasta Helpers criar uma classe TokenResponse que representa o modelo da resposta enviada pelo Servidor de Autenticação existente na Web Api: public class TokenResponse [JsonProperty("access_token")] public string AccessToken get; set; [JsonProperty("token_type")] public string TokenType get; set; [JsonProperty("expires_in")] public int ExpiresIn get; set; [JsonProperty("userName")] public string Username get; set; [JsonProperty(".issued")] public string IssuedAt get; set; [JsonProperty(".expires")] public string ExpiresAt get; set; Na pasta Helpers alterar a classe WebApiHttpClient, para o objeto HttpClient enviar um cabeçalho de Autorização depois de receber o Access Token. namespace ClienteMvcAuth.Helpers public static class WebApiHttpClient public const string WebApiBaseAddress = "http:localhost:1742/"; public static HttpClient GetClient() HttpClient client = new HttpClient(); client.baseaddress = new Uri(WebApiBaseAddress); client.defaultrequestheaders.accept.clear(); client.defaultrequestheaders.accept.add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); var session = HttpContext.Current.Session; if (session["token"]!= null) TokenResponse tokenresponse = gettoken(); client.defaultrequestheaders.authorization = new AuthenticationHeaderValue("bearer", tokenresponse.accesstoken); return client; public static void storetoken(tokenresponse token) var session = HttpContext.Current.Session; session["token"] = token; public static TokenResponse gettoken() var session = HttpContext.Current.Session; return (TokenResponse) session["token"];

4.1. Testar o Login de um utilizador Executar o Serviço (aplicação Web API, WebApiAuth) e o Cliente (aplicação MVC, ClienteMvcAuth). Clicar no botão Login para autenticar um utilizador 4.2. Ver o Access Token criado pelo Servidor de Autenticação no Login de um utilizador Executar o código anterior comentando, no método POST Login de AccountController, a instrução que guarda num objeto session o Access Token criado pelo Servidor de Autenticação existente na aplicação Web Api ( WebApiHttpClient.storeToken(tokenResponse);) e retornando a resposta enviada pela aplicação Web Api: if (response.issuccessstatuscode) string contentresponse = await response.content.readasstringasync(); return Content(contentResponse); TokenResponse tokenresponse = await response.content.readasasync<tokenresponse>(); WebApiHttpClient.storeToken(tokenResponse); return Content(tokenResponse.AccessToken); return RedirectToAction("Index", "Home"); Executar o Serviço (aplicação Web API, WebApiAuth) e o Cliente (aplicação MVC, ClienteMvcAuth). Clicar no botão Login para autenticar um utilizador Token response: "access_token":"hifwj.", "token_type":"bearer", "expires_in":1209599, "username":"a@a.pt", ".issued":"tue, 24 Nov 2015 20:41:07 GMT", ".expires":"tue, 08 Dec 2015 20:41:07 GMT"

5. Efetuar o Pedido de um Recurso protegido Na aplicação Web Api colocar a classe Editora na pasta Models. Adicionar um Controlador para o modelo Editora. Colocar o filtro [Authorize] no cabeçalho da classe EditorasController. Na aplicação Cliente MVC colocar a classe Editora na pasta Models. Adicionar um Controlador para o modelo Editora. Alterar esta classe EditorasController para fazer pedidos ao Serviço web Api. Executar o Serviço e o Cliente. Testar as várias ações do controlador Editoras do Cliente.