OAuth2 - Redirect Flows

  • Rafael Miceli
  • 19 Abr 2016

Quando vamos usar OAuth2 como protocolo para autorização da nossa aplicação, uma das coisas que precisamos definir é, qual Flow ou Grant usar para obter nosso Token (Access Token).

Redirect Flows

Usando um Redirect Flow com Oauth, a autorização realizaria o seguinte fluxo:

  1. Você realiza a chamada a área “restrita” do site que você quer acessar (Client)
  2. Você é redirecionado para outro site (Authorization Server) com uma tela de login.
  3. Você insere seu login e senha e…(essa parte varia um pouco) é redirecionado para a url da área restrita (Client) com o access token.
  4. A área restrita que você acessou busca os dados na API (Resource Server), passando o access token no Header do request.
  5. A API valida o access token, e caso o token seja válido, retorna o conteúdo pedido.

flow

Implicit Grant

O fluxo explicado acima se diz respeito ao uso do Implicit Grant, apesar que pode estar faltando um passo, dependendo da configuração em seu Authorization Server.

No Implicit Grant, após você inserir seu login e senha, você recebe seu access token no response como um Hash Fragment na url.

Authorization Code Grant

O Authorization Code Grant consiste de um fluxo muito similar ao implicit, mas a grande diferença é que no Authorization Code Grant ao invés de você receber seu access token no response do seu login, você recebe um Authorization Code.

Após isso você realiza mais um request ao authorization server pedindo seu access token, passando seu recém recebido Authorization Code.

Porque essa diferença do Implicit grant para o Authorization Code Grant?

Por motivos de segurança. Pois o Implicit Grant passa seu access token como um Hash Fragment, enquanto o Auhtorization Code Grant trabalha enviando um Authorization Code como parâmetro da sua URL, para que após, seu Authorization Server receba esse Authorization Code + seu Client Secret (em um próximo artigo) para validar ambos e te retornar um access token. Outra diferença em questão de segurança também é que o Implicit não recebe refresh tokens enquanto o Authorizaton Code, recebe.

Em um próximo post implementamos um Redirect Flow.

comentarios com Disqus Disqus