Neste post vou falar de como podemos usar o OAuth para adicionar segurança a nossa API e de uma forma simples.
O exemplo a seguir é mais focado para API’s que não precisam pegar autorização do usuario para dados e etc.
O que OAuth?
OAuth é um protocolo padrão livre de autorização. Designado para trabalhar com requisições de protocolo HTTP o OAuth funciona como um um centro de informação possuindo as credenciais do cliente e as informações do recurso requisitado.
Como isso funciona?
O funcionamento basicamente se divide em dois atores o cliente e o recurso.
Quem é o cliente?
O cliente é o ator que irá fazer a requisição para determinado recurso de nossa API, por exemplo, o nosso recurso de produtos que fica em http://example.com/products digamos que minha requisição é do tipo GET, ou seja eu quero uma lista de produtos.
Mas antes de fazer essa requisição o nosso cliente vai precisar de uma autorização, então de alguma maneira, seja em um painel administrativo ou outra forma é preciso gerar uma credencial para esse cliente, uma credencial única que ele usara para se autenticar em nosso servidor do OAuth.
O cliente com sua credencial chamado de access_token, que normalmente é um hash md5 agora ja consegue gerar um token de autorização para conseguir acessar o recurso.
O cliente com sua credencial faz uma requisição para o servidor de autorização no caso o servidor do OAuth e se estiver ativo e correto o servidor de autorização devolvera para ele um token de autorização, normalmente com um prazo de expiração. O prazo de expiração serve para que se em algum momento for preciso desativar um certo cliente, ele não conseguira mais gerar um novo token de autorização e ira parar de usar a nossa API.
Quem é o recurso e como é acessado?
O recurso é o destino que o cliente deseja acessar na nossa API, em nosso caso de exemplo o nosso recurso é o produtos que fica em http://example.com/products , agora o cliente que ja esta com seu token de autorização em mãos vai fazer uma requisição para a URL do recurso informando esse token de autorização que normalmente vem em um header da requisição HTTP em um formato como este Authorization: Bearer e9d1b97bfd3e30a46684ff9737bf36e8cd5d65b4.
Como o servidor de recursos sabe que o cliente tem autorização?
Agora o provedor do recurso ou seja o servidor, precisa saber se o cliente tem ou não autorização para acessar o recurso que ele esta requisitando, para isto o servidor precisa consultar o servidor de autorização, o servidor do OAuth no caso, e verificar se o token temporário é valido e tem autorização para acessar o recurso que ele precisa.
Caso ele tenha autorização o servidor ira processar a requisição normalmente e dar a resposta para o cliente. Caso não, cabe a o servidor informar o cliente que seu token de autorização tem problema e ele precisa gerar um novo para poder acessar o recurso.
Esta na verdade é uma breve introdução para que seja possivel entender como funciona o fluxo.
Referencias:
Http headers: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
OAuth2: http://oauth.net/2/
Restful: http://www.restapitutorial.com/