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.
- 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.
- 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ê).
- 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.
- 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.
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.
-
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.
-
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.
-
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.
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.
- 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.
- 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.