Conheça o vencedor regional de Call for Code 2020 para a América Latina Blog post

Proteja APIs usando o OAuth 2.0

Este tutorial mostra como implementar os esquemas OAuth 2.0 que estão disponíveis no IBM API Connect para proteger uma API.

O IBM API Connect fornece dois modos de implementação, cada um dos quais fornece diferentes esquemas OAuth 2.0:

  • Modo confidencial. Um modo Confidencial é adequado quando um aplicativo é capaz de manter a confidencialidade do segredo do cliente. Use o modo confidencial quando um aplicativo é capaz de manter a confidencialidade do segredo do cliente. Esse geralmente é o caso quando um aplicativo é executado em um navegador e acessa seu próprio servidor ao obter tokens de acesso OAuth. Desse modo, esses esquemas fazem uso do segredo do cliente. No modo Confidencial, nós temos três esquemas OAuth: Aplicativo, Senha e Código de acesso.

  • Modo público. Um modo Público é adequado quando um aplicativo é incapaz de manter a confidencialidade do segredo do cliente. Esse geralmente é o caso quando o aplicativo é nativo em um computador ou dispositivo móvel no qual o segredo precisaria ser armazenado no dispositivo do usuário, provavelmente dentro do código-fonte do aplicativo. Desse modo, esses esquemas não fazem uso do segredo do cliente. No modo Público, nós temos três esquemas OAuth: Implícito, Senha e Código de acesso.

Os arquivos de configuração da API OAuth para todos os esquemas e modos de implementação OAuth que nós usaremos neste tutorial estão disponíveis neste repositório do GitHub.

Nós desenvolveremos o aplicativo cliente usando o Node-RED. Os fluxos de Node-RED implementam um terminal de autenticação simulado e um terminal do aplicativo que requer autorização. Esses fluxos de Node-RED demonstram como os diferentes esquemas OAuth trabalham para autorizar o acesso ao terminal do aplicativo.

Objetivos do aprendizado

Neste tutorial, você aprenderá como:

  1. Configurar o API Connect para os diferentes esquemas OAuth 2.0.
  2. Desenvolver um aplicativo cliente baseado em Node-RED que usa o API Connect para fornecer acesso autorizado a um terminal.
  3. Criar solicitações http com cabeçalhos e cargas úteis para cada um dos esquemas OAuth.

Pré-requisitos

Será necessária uma Conta do IBM Cloud.

Tempo estimado

A conclusão deste tutorial deve levar cerca de 30 minutos.

Etapas

  1. Crie uma instância de serviço do API Connect.
  2. Crie uma instância de serviço do Node-RED.
  3. Configure o serviço do API Connect.
  4. Implemente o aplicativo cliente.
  5. Execute o aplicativo.
1

Crie uma instância de serviço do API Connect

Crie uma instância do IBM API Connect. Assegure-se de que o plano Lite esteja selecionado e, em seguida, clique em Criar.

Crie a instância do API Connect

2

Crie uma instância de serviço do Node-RED

Crie uma instância do aplicativo Node-RED Starter. Assegure-se de que o plano Lite esteja selecionado e, em seguida, clique em Criar.

Criar instância do Node-RED

Clique em Visitar URL do aplicativo e, em seguida, use o assistente para configurar o Node-RED.

Certifique-se de anotar a URL base do Node-RED, tal como: https://client-app-demo.eu-gb.mybluemix.net/.

Anote a URL base do Node-RED

3

Configure o API Connect

  1. Anote a URL de terminal no API Connect:
    1. No painel do API Connect, clique em Sandbox.
    2. Selecione Configurações.
    3. Selecione Gateways.
    4. Anote a URL de terminal.

Anote a URL de terminal

  1. Crie APIs para OAuth (modo Confidencial), OAuth (modo Público) e Aplicativo.

Para este tutorial, nós requeremos as configurações de API para OAuth (modo Confidencial), OAuth (modo Público) e Aplicativo. Você importará os arquivos de configuração, que estão disponíveis em meu repositório do GitHub, no IBM API Connect.

Crie APIs

Crie uma API para o modo Confidencial do OAuth

  1. No painel do API Connect, selecione Rascunhos.
  2. Selecione APIs
  3. Clique em Incluir e, em seguida, selecione Importar API de um arquivo ou URL.
  4. Selecione Ou importar da URL.
  5. Insira a URL https://raw.githubusercontent.com/IBM/api-connect-oauth-tutorial/master/resources/oauth_confidential_endpoint.yaml.
  6. Na guia Design para a API, selecione OAuth 2.
  7. Role para baixo até a seção Autenticação. Para a URL de autenticação, especifique a URL base do Node-RED que você anotou anteriormente, mas inclua /authenticate. Por exemplo: https://client-app-demo.eu-gb.mybluemix.net/authenticate. Você criará um serviço de autenticação simulado nas etapas subsequentes.
  8. Clique no ícone Salvar.

Crie uma API para o modo Público do OAuth

  1. No painel do API Connect, selecione Rascunhos.
  2. Selecione APIs
  3. Clique em Incluir e, em seguida, selecione Importar API de um arquivo ou URL.
  4. Selecione Ou importar da URL.
  5. Insira a URL https://raw.githubusercontent.com/IBM/api-connect-oauth-tutorial/master/resources/oauth_public_endpoint.yaml.
  6. Na guia Design para a API, selecione OAuth 2.
  7. Role para baixo até a seção Autenticação. Para a URL de autenticação, especifique a URL base do Node-RED que você anotou anteriormente, mas inclua /authenticate. Por exemplo: https://client-app-demo.eu-gb.mybluemix.net/authenticate. Você criará um serviço de autenticação simulado nas etapas subsequentes.
  8. Clique no ícone Salvar.

Crie uma API para o aplicativo cliente

  1. No painel do API Connect, selecione Rascunhos.
  2. Selecione APIs
  3. Clique em Incluir e, em seguida, selecione Importar API de um arquivo ou URL.
  4. Selecione Ou importar da URL.
  5. Insira a URL https://raw.githubusercontent.com/IBM/api-connect-oauth-tutorial/master/resources/app_endpoint.yaml.
  6. Na guia Design para a API, selecione Definições de segurança.
  7. Role para baixo até a seção Autenticação. Para a URL de autorização, especifique a URL de terminal para o API Connect que você anotou anteriormente, mas inclua /conf/oauth2/authorize. Essa URL de autorização é para o modo confidencial. Será necessário mudar essa URL quando você usar o modo Público.
  8. Para a URL de token, especifique a URL de terminal para o API Connect que você anotou anteriormente, mas inclua /conf/oauth2/token. Essa URL de autorização é para o modo confidencial. Será necessário mudar essa URL quando você usar o modo Público.
  9. Clique no ícone Salvar.
  10. Selecione a guia Montar. Selecione Chamar. Para a URL, especifique a URL base do Node-RED que você anotou anteriormente, mas inclua /app. Por exemplo: https://client-app-demo.eu-gb.mybluemix.net/app.
  11. Anote a URL da API.

Anote a URL para a API. A URL da API é a URL de terminal para o API Connect que você anotou anteriormente, mas com /appendpoint/ops no final.

Crie um produto e publique-o

  1. No painel do API Connect, selecione Rascunhos e, em seguida, selecione Produtos.
  2. Selecione Incluir > Novo produto.
  3. Insira um título, nome e uma versão e, em seguida, clique em Criar produto.
  4. Na página Design, selecione as APIs à esquerda do navegador para rolar até essa seção. Em seguida, clique no + para incluir APIs.
  5. Selecione todas as três APIs que acabamos de definir. Clique em Aplicar.
  6. Clique no ícone Salvar.
  7. Clique no ícone Estágio e, em seguida, selecione Sandbox.
  8. Acesse o Painel e selecione Sandbox.
  9. Selecione o produto estadiado. No menu, selecione Publicar.
  10. No diálogo que é exibido, clique em Publicar.

Crie o produto e publique

Crie um aplicativo no portal do desenvolvedor

  1. No painel do Sandbox, selecione Configurações.
  2. À esquerda do navegador, selecione Portal.
  3. Na lista Selecionar portal, selecione IBM Developer Portal.

    Ative o IBM Developer Portal

  4. Na lista Selecionar portal, clique no link URL do Portal para abrir o portal.

  5. Na página de portal, clique em Criar uma conta. Especifique os detalhes da conta e clique em Criar nova conta.
  6. Ative a conta clicando na URL que foi enviada para o e-mail que você especificou.
  7. Efetue login no portal com as credenciais que você especificou.
  8. No portal, clique em Aplicativos.
  9. Clique em Criar um aplicativo.
  10. Insira um título e descrição para o aplicativo. Para o URI de redirecionamento do OAuth, especifique a URL base do Node-RED que você anotou anteriormente, mas inclua /appredirect. Em seguida, clique em Enviar. Certifique-se de anotar o ID do cliente e o Segredo do cliente que foi gerado para esse aplicativo.
  11. Na página de portal, selecione Produtos de API. Em seguida, selecione o produto que acabamos de criar e publicar e, em seguida, clique em Assinar para assinar o plano padrão.

Crie o aplicativo

4

Implemente o aplicativo cliente

O aplicativo cliente foi implementado usando o Node-RED. O fluxo do Node-RED está disponível como um arquivo JSON em meu repositório do GitHub.

O fluxo do Node-RED possui um terminal de autenticação simulado e um terminal do aplicativo que demonstra o trabalho dos fluxos de OAuth.

  1. Para importar o fluxo do Node-RED, siga estas etapas:

    1. Copie o conteúdo bruto do arquivo JSON.
    2. Acesse o editor de fluxo do Node-RED.
    3. Selecione Importar e, em seguida, selecione Área de transferência.
    4. Cole o conteúdo copiado do arquivo JSON.
    5. Clique em Importar.
  2. Clique em Implementar para implementar o fluxo do Node-RED.

Importe o Node RED

5

Execute o aplicativo

  1. Configure o aplicativo acessando a URL base do Node-RED que você anotou anteriormente, mas inclua /configuredemo. Especifique todos os detalhes. Especifique as URLs adequadas de autorização e de token, dependendo se o modo é confidencial ou público. Clique em Configurar.

  2. Após configurar o aplicativo, a página `/logindemo é aberta. Selecione o modo confidencial ou o modo público, selecione o esquema e clique em Efetuar login.

O token é gerado e a API do aplicativo é acessada com sucesso.

Na janela de depuração do Node-RED, nós podemos ver os detalhes da solicitação que são gerados para o modo de implementação e o esquema do OAuth selecionados.

A seguir há uma demo do modo confidencial:

Crie o aplicativo

A seguir há uma demo do modo público:

Crie o aplicativo

Resumo

Neste tutorial, nós pudemos acessar uma API de aplicativo com todos os modos e esquemas do OAuth 2.0 que são suportados pelo IBM API Connect. Nós também vimos a URL, os cabeçalhos e a carga útil para as solicitações de http que foram geradas com base no esquema de OAuth selecionado.