Skip to content

Instantly share code, notes, and snippets.

@dbeyda
Last active May 15, 2019 16:54
Show Gist options
  • Save dbeyda/8dcf1eb98aad565ec6af32b7c0e6377f to your computer and use it in GitHub Desktop.
Save dbeyda/8dcf1eb98aad565ec6af32b7c0e6377f to your computer and use it in GitHub Desktop.
SDEC OAuth2 Usage

SDEC OAuth2 Usage Guide

Grant by Authorization Code:

Nesse tipo de autenticação, o client direciona o usuário para uma página do servidor de autenticação, onde o usuário fará login e concederá alguma permissão para o client. Em seguida, o usuário é redirecionado de volta para o domínio do client, por meio de uma URL de callback definida pelo client. Dessa forma, o usuário coloca seu login e senha apenas no servidor de autenticação, de forma que esses dados não passam pelo client em nenhum momento. Para seguir esse processo, usaremos o navegador + Postman.

  1. Com o server rodando, abra o navegador em https://localhost:8000/dialog/authorize?response_type=code&client_id=289a320e-6ea8-11e9-a923-1681be663d3e&redirect_uri=http://www.google.com. Essa URL já está preenchida com o client_id criado no banco, com o response_type desse tipo de autenticação, e com um redirect_uri para exemplo. Na prática, algum link do client te mandará para essa URL, com os parâmetros já preenchidos.
  2. Você será redirecionado para a página de login. Faça login, e verá a mensagem do client pedindo autorização. Ao conceder autorização, você será redirecionado para a página de callback. Repare que haverá um parâmetro code=<codigo> na URL do callback. Esse é o código de autorização. Ele será usado pelo client para que se obtenha uma token referente ao usuário que o autorizou (você).
  3. Nesse momento, a autorização a foi concedida. Precisamos apenas trocar esse código por uma token para poder fazer requests em nome do usuário. Copie esse código e abra o Postman. Agora, você deve fazer um POST request para https://localhost:8000/oauth/token, com as seguintes chaves no body da request:
client_id: 289a320e-6ea8-11e9-a923-1681be663d3e
client_secret: ssh-secret
code: <seu codigo>
grant_type: authorization_code
redirect_uri: http://www.google.com

Antes de enviar, lembre de selecionar a opção x-www-form-urlencoded.

  1. O servidor te respondeu com uma Access Token. Agora, você pode copiá-la, e, mesmo sem estar logado, checar informações do usuário. Apague os cookies do Postman, e tente dar um GET para https://localhost:8000/api/userinfo. Caso você não esteja logado como usuário no servidor de autenticação, você deve receber uma mensagem de permissão negada. Agora, em Authorization, selecione a autorização Bearer Token, e coloque a código ao lado. Repare que tudo que isso faz é adicionar um header Authorization = Bearer <sua token>. Envie a request, e você deve receber os dados do usuário.

Implicit Authorization

Esse fluxo se parece com o anterior, porém utiliza menos requests (otimizado para aplicações web). Em vez de pegar o código de autorização para depois pegar a token, após a concessão de alguma permissão, o cliente recebe diretamente a token. Para seguir esse processo, usaremos o navegador + Postman.

  1. Com o server rodando, abra o navegador em https://localhost:8000/dialog/authorize?response_type=token&client_id=289a320e-6ea8-11e9-a923-1681be663d3e&redirect_uri=http://www.google.com. Essa URL já está preenchida com o client_id criado no banco, com o response_type desse tipo de autenticação, e com um redirect_uri para exemplo. Na prática, algum link do client te mandará para essa URL, com os parâmetros já preenchidos.

  2. Você será redirecionado para a página de login. Faça login, e verá a mensagem do client pedindo autorização. Ao conceder autorização, você será redirecionado para a página de callback. Repare que haverá um parâmetro access_token=<token> na URL do callback. Essa é a token emitida pelo servidor. Você já pode utilizar essa token para fazer requests em nome do usuário.

  3. Copie a access_token, e, mesmo sem estar logado, tente checar informações do usuário. Apague os cookies do Postman, e tente dar um GET para https://localhost:8000/api/userinfo. Caso você não esteja logado como usuário no servidor de autenticação, você deve receber uma mensagem de permissão negada. Agora, em Authorization, selecione a autorização Bearer Token, e coloque a token ao lado. Repare que tudo que isso faz é adicionar um header Authorization = Bearer <sua token>. Envie a request, e você deve receber os dados do usuário.

Client Credentials

Nesse fluxo o usuário não é envolvido. A token obtida por esse método de autenticação é uma token relativa somente ao client, que permitirá ao client interagir com seus próprios recursos. Para seguir esse processo, usaremos o navegador + Postman.

  1. Com o server rodando, faça um POST para https://localhost:8000/oauth/token. Para autenticar esse request, utilize authorization Basic no Postman, com o client_id e client_secret. O que isso faz é formar uma string client_id:client_secret, codificá-la em base64, e adicionar um header Authorization: Basic . Além disso, no body da request, adicione a seguinte chave:
grant_type: client_credentials

Antes de enviar, lembre de selecionar a opção x-www-form-urlencoded.

  1. Você receberá uma access_token. Essa token não te deixa fazer requests em nome de nenhum usuário, mas te deixa acessar seus próprios recursos: estatísticas e CRUDs do seu client junto ao servidor de recursos. Copie a access_token e tente fazer um GET para https://localhost:8000/api/clientinfo, utilizando autenticação Bearer com essa token. Você deve receber informações sobre o client.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment