Como configurar e usar a autenticação OAuth usando WP REST API
Publicados: 2016-11-30
Quando se trata da API REST do WordPress, OAuth é o provedor de tratamento de autenticação mais comum.
Quando a autenticação OAuth está em vigor, os usuários primeiro fazem login por meio do formulário de login do WordPress que está em uso no site. no entanto, esse login também autoriza os clientes a lidar com solicitações em seu nome e todas as solicitações subsequentes são validadas por meio de tokens OAuth. Esses tokens também são usados para gerenciar todas as solicitações de acesso à API. Este acesso pode ser revogado a qualquer momento.
Talvez o uso mais importante do processo de autenticação OAuth seja o processo seguro de manipulação de solicitações da API REST sem expor as credenciais dos usuários. Isso é particularmente importante no caso de servidores de produção, onde as credenciais são frequentemente trocadas. Em tais cenários, a autenticação OAuth é usada para fornecer um procedimento seguro para lidar com a solicitação frequente de credenciais de login.
- Autenticação tradicional versus OAuth
- Fluxo de trabalho de autenticação OAuth
- Instalação de autenticação OAuth
- Avaliando a disponibilidade da API OAuth
- Criação e gerenciamento de aplicativos
- CLI do cliente para gerar credenciais OAuth
- Cliente HTTP para gerar credenciais OAuth
- Aquisição de credenciais temporárias
- Autorização de Usuário
- Token Exchange
- Enviando uma Solicitação de Teste de Autenticação
Autenticação tradicional versus OAuth
Para entender a importância da autenticação OAuth, é importante entender o modelo de autenticação tradicional e OAuth.
No modelo de autenticação tradicional, existem duas entidades principais; Cliente e Provedor de Recursos / Serviços. O cliente pode ser um aplicativo da web, serviço ou usuário, enquanto o Provedor de Recurso / Serviço possui os recursos ou serviços desejados em um ambiente de acesso restrito.
Quando o Cliente requer um recurso específico, ele se autentica com o Provedor de Recursos, fornecendo as credenciais apropriadas. Embora seja um processo simples, também existe um grande risco de violação de segurança.
Em contraste, o modelo de autenticação OAuth é um pouco mais complexo com três entidades; Cliente que atua em nome do usuário, Usuário que requer acesso a um recurso e Servidor que mantém o recurso.
Como existem três entidades, o processo é conhecido como autenticação de três etapas. No entanto, nos casos em que o Cliente e o Usuário são as mesmas entidades, o processo de autenticação torna-se a autenticação de duas etapas.
Fluxo de trabalho de autenticação OAuth

- O Cliente solicita autorização do Usuário para acessar o Servidor .
- Se o usuário conceder a solicitação, o cliente receberá o direito de prosseguir.
- O Cliente apresenta sua identidade e o mandato do Cliente ao Servidor de Autorização (API) e solicita um token.
- No caso de validação bem-sucedida da identidade e do mandato, o Authorization Server (API) emite um token de acesso ao Cliente . Neste ponto, a autenticação está concluída.
- Em seguida, o Cliente se aproxima do Servidor para solicitar um determinado recurso. Neste ponto, o cliente também envia o token de acesso para o
- Se o token de acesso for validado, o servidor concede acesso ao recurso solicitado.
O Cliente origina a solicitação assinada de um Token de Solicitação. Essa solicitação também é conhecida como Credenciais Temporárias. A solicitação é enviada ao URI do terminal relevante. Essa solicitação é composta por vários parâmetros importantes:
- oauth_consumer_key : esta chave identifica o aplicativo que originou a solicitação.
- oauth_timestamp : os servidores usam este carimbo de data / hora para otimização do armazenamento de nonces.
- oauth_nonce : este é o token exclusivo gerado pelo aplicativo para cada solicitação individual.
- oauth_signature : esta parte importante da solicitação de API é o hash de todos os componentes da solicitação e alguns valores OAuth.
- oauth_signature_method : O plugin OAuth oferece um único método de assinatura: HMAC-SHA1.
- oath_callback : O URL para onde o usuário é redirecionado após a autorização. A solicitação é verificada e um Token de Solicitação com os parâmetros a seguir é emitido.
- oauth_token : este é o token de aplicativo que é retirado da resposta do servidor de autorização. Esse token é então enviado ao servidor API.
- oauth_token_secret : é semelhante à senha do usuário. A solicitação é então autorizada pelo Cliente. Para isso, um URI de solicitação é criado e oauth_token é adicionado ao URI do terminal de autorização do servidor. O usuário autoriza o envio dessa solicitação, fornecendo as credenciais apropriadas.
Caso o URI oauth_callback esteja disponível na primeira etapa, o servidor redireciona para o URI com os seguintes parâmetros adicionados à string de consulta:
- oauth_token : já tem o token.
- oauth_verifier : verifica a identidade do proprietário do recurso para o cliente.
Se o URI oauth_callback não foi fornecido na primeira etapa, o servidor envia o valor de oauth_verifier para que o proprietário do recurso possa informar o cliente manualmente.
Depois de receber oauth_verfier , o cliente solicita ao servidor as credenciais do token. Isso assume a forma de uma solicitação para o URI do terminal de solicitação de token. Esta solicitação contém os seguintes parâmetros:
- oauth_token
- oauth_verfier
- oauth_consumer_key
- oauth_signature
- oauth_signature_method
- oauth_nonce
- oauth_version
Instalação de autenticação OAuth
No contexto do WordPress, a autenticação OAuth é implementada com a instalação da API de autenticação OAuth para WordPress. Isso se baseia nas especificações do OAuth 1.0a e, na verdade, estende essas especificações por um parâmetro adicional wp_scope. Este parâmetro é enviado ao endpoint de Solicitação de Credencial Temporário .
O plugin está disponível no Github pela equipe WP REST API. No momento, há suporte para a versão 4.4 e posterior.
Iniciarei o processo de clonagem do plug-in movendo para o diretório / wp-content / plugins / :
git clone https://github.com/WP-API/OAuth1.git

Após o término do download, ative o plug-in por meio da CLI do WordPress:
plugin wp ativar OAuth1
Se você não deseja usar WordPress CLI, você pode ir para WordPress Admin >> Plugins e ativar o plugin a partir do menu. Alternativamente, você também pode ativá-lo navegando em seu navegador até a seção de plug-ins de administração do WordPress se não quiser usar o WP CLI.
Avaliando a disponibilidade da API OAuth
Antes de iniciar o handshake do OAuth, verificarei primeiro se a API está habilitada no servidor. Isso é feito enviando uma solicitação GET simples para o / wp-json / endpoint e, em seguida, analisando a resposta enviada pelo servidor.
OBTER http: // Server-Dev / wp-json /
Isso retornará uma resposta JSON da seguinte maneira:

Meu foco aqui é o valor oauth1 no valor da propriedade de autenticação . Este objeto possui as seguintes propriedades definidas:
- solicitação : o endpoint de solicitação de credencial temporária
- autorizar : o endpoint de autorização do proprietário do recurso
- acesso : o endpoint de solicitação de token
- versão : a versão do OAuth que está sendo usada
Se a API OAuth não estiver habilitada para um site, a resposta do servidor conterá um valor de propriedade de autorização vazio.

Criação e gerenciamento de aplicativos
A primeira etapa é certificar-se de que o plug-in OAuth1.0 está instalado e ativado corretamente.
Em seguida, posso criar e gerenciar aplicativos acessando WordPress Admin >> Usuários >> Aplicativos.


Nesta página de Aplicativos Registrados , irei registrar um novo aplicativo clicando no botão Adicionar Novo e preenchendo os três campos a seguir:
- Nome do cliente: o nome do cliente que aparece na seção Aplicativos autorizados e durante o processo de autorização.
- Descrição : a descrição opcional do cliente.
- URL de retorno de chamada: o URL de retorno de chamada é usado ao gerar credenciais temporárias.
Depois de criado clicando no botão Salvar cliente , os parâmetros Chave do cliente e Segredo do cliente aparecerão na parte inferior da página para este cliente específico.

Agora, clonarei o repositório no cliente executando o seguinte comando:
git clone https://github.com/WP-API/client-cli

Agora navegue até o diretório clonado e instale as dependências do pacote usando o Composer:
cd client-cli instalação do compositor
Se tudo correr bem, a linha de comando deve mostrar algo semelhante ao seguinte:

CLI do cliente para gerar credenciais OAuth
Para iniciar o processo de autorização OAuth, primeiro obterei os seguintes parâmetros do servidor:
- oauth_consumer_key
- oauth_consumer_secret
Isso será gerado por meio do terminal e executando o seguinte comando da CLI do WordPress:
wp oauth1 add
A chave e o segredo são oauth_consumer_key e oauth_consumer_secret respectivamente.
Agora preciso vincular o cliente ao site do WordPress. No cliente, navegue até o diretório client-cli (clonado anteriormente) e execute o seguinte comando:
wp --require = client.php api oauth1 conectar http: // Server-Dev / --key = <sua chave aqui> --secret = <seu segredo aqui>
Substitua o URL, a chave e o segredo no comando acima. O resultado deve ser o seguinte:
wp --require = client.php api oauth1 conectar http: // seu-servidor / wordpress-api / --key = <sua chave> --secret = <seu código secreto> Abra em seu navegador: http: // seu-servidor / wordpress-api / oauth1 / authorize? Oauth_token = <your-token> Insira o código de verificação:
Navegue até o URL fornecido pelo servidor e autentique clicando no botão Autorizar :

Você verá o token de verificação (ou o oauth_verifier) na próxima tela:

Copie o verificador e cole-o no terminal. Você receberá uma chave e um segredo , que são basicamente oauth_token e oauth_token_secret, respectivamente:
Cliente HTTP para gerar credenciais OAuth
Como o plug-in do servidor OAuth 1.0a segue o fluxo de três etapas padrão, a geração de credenciais OAuth envolve as seguintes etapas:
- Aquisição de credenciais temporárias
- Autorizações de usuário
- Troca de token
Aquisição de credenciais temporárias
Vou enviar uma solicitação POST para / oauth1 / endpoint de solicitação para obter credenciais temporárias. Observe que este ponto de extremidade deve ser autodescoberto, pois um servidor pode substituir a rota por conta própria.
A solicitação POST deve incluir os parâmetros e oauth_consumer_secret conforme adquiridos ao registrar um consumidor para o aplicativo. A solicitação também pode incluir o parâmetro oauth_callback e esse URL de retorno de chamada deve corresponder ao esquema, host, porta e caminho do URL de retorno que foi fornecido ao registrar o aplicativo.
Além dos parâmetros oauth_consumer_key e oauth_consumer_secret, o pedido deve incluir também os parâmetros oauth_signature e oauth_signature_method.
Ao usar o Postman, o oauth_signature é gerado automaticamente. Só preciso mencionar o parâmetro oauth_signature_method . No momento, apenas o método de assinatura HMAC-SHA1 é compatível com o plug-in do servidor OAuth.
Agora configurarei o Postman para enviar uma solicitação POST ao ponto de extremidade de credenciais de token temporário. Em seguida, na guia Autorização , selecione a opção OAuth 1.0 no menu suspenso. Preencha os campos Chave do consumidor e Segredo do consumidor com os valores fornecidos pelo consumidor. Por fim, verifique se a opção Método de assinatura está definida como HMAC-SHA1 .
Autorização de Usuário
Para a etapa de autorização do usuário, abrirei o endpoint de autorização do proprietário do recurso no navegador e passarei o oauth_token e oauth_token_secret conforme obtido na etapa anterior como parâmetros de consulta:
http: // server-dev / oauth1 / authorize? oauth_token = <token_here> & oauth_token_secret = <secret_here>

Autorize o aplicativo clicando no botão Autorizar . A próxima tela apresentará um token de verificação. Este token agirá agora como um token oauth_verifier na próxima etapa.
Depois que o usuário autorizar o cliente, o aplicativo aparecerá na seção Aplicativos autorizados na página Usuários> Seu perfil .
Token Exchange
Usando a opção OAuth 1.0 novamente na guia Autorização , preencha os campos para Chave do consumidor e Segredo do consumidor com os valores fornecidos pelo consumidor. Nos campos de token e Token Secret, insira o oauth_token valor e parâmetros oauth_token_secret (credenciais temporárias).
Como também posso passar parâmetros no URL como parâmetros de consulta, anexe o parâmetro oauth_verifier ao URL da seguinte maneira:
http: // server-dev / oauth1 / access? oauth_verifier = <oauth_verifier_value>
Com todos os parâmetros definidos, envie a solicitação clicando no botão Enviar . Se tudo correr bem, o servidor retornará um código de status 200 - OK junto com o corpo da resposta contendo os parâmetros oauth_token e o auth_token_secret .
oauth_token = <oauth_token_value> & oauth_token_secret = <oauth_secret_value>
Nesse ponto, os tokens temporários adquiridos anteriormente são descartados e não podem mais ser usados.
Os novos parâmetros oauth_token e oauth_token_secret são as credenciais do OAuth que você pode usar no cliente para gerar solicitações autenticadas.
Enviando uma Solicitação de Teste de Autenticação
Agora que tenho as credenciais do token, enviarei uma solicitação de teste ao servidor usando o Postman. A solicitação exigirá os seguintes parâmetros:
Você precisará ter o seguinte antes de começar:
- oauth_consumer_key
- oauth_consumer_secret
- oauth_token
- oauth_token_secret
Selecione OAuth 1.0 no menu suspenso na guia Autorização do Postman.

Depois de preencher todos os campos, clique no botão Solicitação de atualização . Marque a opção Adicionar parâmetros ao cabeçalho para enviar os parâmetros no cabeçalho da solicitação em vez de anexá-los à string de consulta.
Se a solicitação for bem-sucedida, o servidor enviará um código de status 200 - OK .
Empacotando!
Neste tutorial, discuti como configurar a API de autenticação OAuth para WordPress em um servidor e como usar o cliente HTTP para obter credenciais de token. Se você descobrir um problema no código ou quiser adicionar à discussão, deixe um comentário abaixo.
