OAuth2 - Implementando Implicit Grant Asp.Net 4.5

  • Rafael Miceli
  • 25 Abr 2016

Neste post vamos utilizar nosso Authorization Server que criamos para autorizar uma aplicação escola que está em meu Github:

Preparando o Authoriztion Server para o novo Client

Vamos preparar nosso Authoriztion Server para receber um novo Client realizando o fluxo Implicit Grant para autorização do mesmo.

Para configurar nosso Authorization Server é muito simples, temos apenas de adicionar mais um Client na nossa classe InMemoryClients:

new Client
{
    ClientId = "teste_implict",
    ClientName = "Teste OAuth2 Implicit",
    ClientSecrets = new List<Secret>
    {
        new Secret("secret".Sha256())
    },
    Flow = Flows.Implicit,

    AllowedScopes  = new List<string>
    {
            StandardScopes.OpenId.Name,
            StandardScopes.Profile.Name,
            "read"
    },
    RedirectUris = new List<string>
    {
        "http://localhost:50334"
    },
    Enabled = true
}

Neste novo Client de Id teste_implicit vamos utilizar o Implicit flow e permitir dois novos Scopes um Standard: Profile, e outro Custom: read.

Excelente! Nosso Authorization Server está pronto para o novo Client.

Preparando o Client

Vamos preparar nosso Client para autorização.

Em nosso “MateriaContoller” vamos adicionar o atributo Authorize em sua classe.

passo1

Se executarmos nossa aplicação neste momento e tentarmos chamar a API Materia vamos receber um código 401.

passo2

Excelente! Agora precisamos adicionar algumas dependências em nossa aplicação usando nosso Package Manager Console

As dependências são:

Microsoft.Owin.Security.OpenIdConnect
Microsoft.Owin.Security.Cookies

Próximo passo, precisamos configurar nosso Startup.cs:

> Caso você não possua uma classe Startup.cs crie a mesma clicando com o botão direito em cima do projeto, escolhendo Add... Depois, New Item... E por fim Selecione OWIN Startup File.

Com o package Cookies que instalamos vamos configura-lo da seguinte forma:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "cookies"
});

Neste trecho estamos dizendo que queremos que o tipo de autenticação que vamos usar será cookies (existem outros tipos como: )

Próximo passo vamos configurar nosso OpenIdConnect:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    ClientId = "teste_implict",
    Authority = "http://localhost:54733/",
    RedirectUri = "http://localhost:50334",
    ResponseType = "id_token token",
    Scope = "openid profile",
    SignInAsAuthenticationType = "cookies"               
});

Nele informamos que somos o Client teste_implicit pelo ClientId, nosso Authority (Autorization Server) fica no endereço informado. Nosso ResponseType são: id_token e token.

Definimos os Scopes que queremos e por fim que tipo de autenticação estamos usando em SignInAsAuthenticationType.

E pronto!

Temos o básico de nosso Client configurado.

Se realizarmos uma chamada Get ao MateriaContoller neste momento seremos redirecionados para nosso Authorization Server para login:

passo3

E ao nos logarmos conseguimos acesso ao recurso.

Em um próximo post vamos melhorar nosso código para Login.

comentarios com Disqus Disqus