Desenvolvimento

30 jan, 2015

Autorização OAuth baseada em Pin para algumas redes sociais

Publicidade

Alguns aplicativos precisam acessar as APIs baseadas em OAuth, mas como elas não se baseiam em navegadores Web normais, eles necessitam precisar usar um método alternativo para obter a autorização do usuário.

A autorização baseada em Pin é um método usado, por exemplo, por aplicativos baseados na linha de comando, aplicativos desktop, sistemas integrados, consoles de jogos e certos tipos de aplicativos móveis.

Leia este artigo para saber como o processo de autorização OAuth baseado em Pin funciona e como você pode implementá-lo em seus aplicativos usando a classe API OAuth PHP.

O que é a autorização OAuth baseada em Pin?

Antes de entender o que é a autorização baseada em Pin, é importante entender como o fluxo normal de autorização OAuth funciona, para que você possa entender a diferença.

OAuth é um protocolo utilizado normalmente para acessar uma API com a permissão de um determinado usuário. Por isso, geralmente, começa levando o usuário para uma página do site do aplicativo. Essa página redireciona o usuário para uma de autorização no site da API que o aplicativo deseja acessar.

Assim, por exemplo, se você tiver um aplicativo que deseja chamar a API do Twitter para recuperar informações de um determinado perfil de usuário, você precisa obter a autorização desse usuário para acessar a API em seu nome e obter as informações de que precisa. Então, você precisa dizer a esse usuário para ir para uma página do seu site. Essa página, por sua vez, é manipulada por um script que redireciona o usuário para a página de autorização do Twitter OAuth.

Nessa página, o usuário é avisado pelo Twitter sobre as permissões que o site deseja que o usuário conceda para acessar a API em seu nome. Se o usuário autorizar o acesso ao aplicativo para a API do Twitter, o navegador do usuário é redirecionado de volta para o seu site, para que seus scripts concluam o processo de autorização OAuth.

Esse é o processo normal. No entanto, existem casos em que isso não pode ser implementado porque o usuário não pode voltar para o seu aplicativo usando um navegador regular.

Por exemplo, um aplicativo móvel nativo pode ser capaz de redirecionar o usuário para acessar a página de autorização OAuth, mas, em seguida, retornar para o aplicativo através do redirecionamento do browser não faria sentido, pois os aplicativos móveis nativos não são baseados em navegador.

O mesmo acontece quando o aplicativo é um script que roda a partir da linha de comando, aplicativos desktop ou é um jogo em execução em um console, ou um aplicativo em execução no sistema incorporado etc.

A alternativa para esses casos é usar a chamada Autorização Pin baseada em OAuth. Ela é similar ao processo de autorização OAuth regular, exceto que, quando o usuário é redirecionado para a página de autorização OAuth e concede as permissões solicitadas de acesso à API, em vez de ser redirecionado para o site do aplicativo, o usuário recebe um código especial que é chamado de pin.

O código pin deve ser fornecido, de alguma maneira para o aplicativo, então ele completa o processo de autorização OAuth por si mesmo, sem maior intervenção do usuário. A partir daí, o aplicativo pode acessar a API autorizada regularmente.

oauth_pin

Implementando a autorização OAuth baseada em Pin no PHP

A classe PHP OAuth API também suporta o fluxo de autorização baseado em pin. É muito simples. Existem duas diferenças principais relativas ao fluxo de autorização OAuth normal.

A primeira diferença é que você precisa definir a variável redirect_uri para o valor “oob”. “oob” significa Out Of Band. É um valor especial que diz ao servidor OAuth para mostrar ao usuário o código pin, em vez de redirecionar o usuário de volta para seu site do aplicativo.

A segunda diferença é que você precisa executar o script de autorização definindo a variável de classe pin para qualquer coisa que o usuário tenha inserido como o código de autorização pin. A partir daí, a classe do cliente OAuth concluirá o processo OAuth sem mais intervenção do usuário. Portanto, essa parte do processo não precisa ser implementada por um script de página Web, como no processo de autorização OAuth regular.

Vamos ver como isso funciona na prática, por exemplo, com o Twitter. Aqui é o começo do exemplo do login regular  com o script twitter.php adaptado para autorização baseada em pin:

 require('http.php');
 require('oauth_client.php');

 $client = new oauth_client_class;
 $client->server = 'Twitter';
 $client->redirect_uri = 'oob';
 $client->client_id = 'Your-Twitter-Application-ID-here';
 $client->client_secret = 'Your-Twitter-Application-Secret-here';

O usuário deverá acessar a página desse script. Ele, então, será redirecionado para a página de autorização do Twitter OAuth. Quando ele autorizar o acesso do seu aplicativo, ele verá o código pin.

O aplicativo deve fornecer uma maneira de permitir que o usuário digite o código pin manualmente para que ele possa continuar com o processo. Você precisa executar novamente o script acima, só que desta vez você precisará definir a variável pin para o código que o usuário inseriu.

Para simplificar o processo e reutilizar o mesmo script sem mudar muito, esse pacote vem com um script separado chamado enter_pin.php. Esse script apresenta um formulário para o usuário para que ele digite o código pin.

O formulário também mostra uma seleção de entrada para deixar o usuário escolher qual script de autorização será utilizado depois que o pin for inserido. Seu aplicativo regular não vai mostrar essa entrada. Ele acabou de ser adicionado a essa formulário apenas para torná-lo reutilizável por vários scripts de exemplo de autorização.

O script de formulário também atribui a constante OAUTH_PIN para o código pin que o usuário digitou. Então, o script login_with_twitter.php só precisa verificar se essa constante está definida e atribuir a variável pin como esta:

if(defined('OAUTH_PIN'))
$client->pin = OAUTH_PIN;

No seu aplicativo real, você não usaria um script baseado em formulário Web para permitir que o usuário inserisse o pin. Então, você precisa implementar o código necessário para obter o pin do usuário.

Conclusão

O processo de autorização OAuth baseado em Pin pode ser implementado por OAuth 1.0a e 2.0 e APIs. No entanto, nem todos os tipos de servidores OAuth suportam a autorização baseada em Pin.

Alguns implementam soluções alternativas para quando não for possível implementar a autorização OAuth regular. Você precisa verificar a documentação do servidor que você quer usar para ver se ele suporta autorização baseada em pin ou não.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://www.phpclasses.org/blog/package/7700/post/6-OAuth-Pin-Based-Authorization-for-Twitter-LinkedIn-Imgur-and-Others.html