Este tutorial mostra como adicionar a funcionalidade OIDC ( OpenID Connect) a um provedor nativo existente do OAuth usando o API Manager.
Sobre este Tutorial
OpenID O Connect é um protocolo de autenticação que funciona em conjunto com o OAuth para controlar o acesso dos usuários aos recursos. Ao utilizar o serviço de autenticação e autorização ( OAuth ) para determinar as autorizações de um usuário, você também pode usar o OIDC para autenticar o usuário por meio de tokens JSON Web (JWT).
Antes de Iniciar
Este tutorial utiliza a API predefinida FindBranch e um provedor nativo existente OAuth configurado com o tipo de autorização "Código de acesso". Para preparar seu ambiente para este tutorial, conclua as seguintes tarefas:
- Adicione o serviço DataPower® API Gateway de gateway ao catálogo do Sandbox, conforme explicado em “Criação e configuração de catálogos ”.
O catálogo do Sandbox deve ser configurado para usar pelo menos um gateway. Para este tutorial, você deve usar o mesmo gateway que a API FindBranch usa.
- Importe a API do FindBranch e ative-a conforme explicado no Tutorial: Importando uma API.
- Crie o provedor nativo OAuth do MyNativeOAuthProvider, conforme explicado no Tutorial: Implementação da segurança do OAuth.
Adicionar compatibilidade com OIDC a um provedor nativo do OAuth
Para adicionar segurança OIDC a um provedor nativo do ` OAuth `, siga estas etapas:
- Abra o provedor OAuth para edição:
- Faça login no API Manager.
- Na página inicial, clique no bloco “Gerenciar recursos ”.

- Na lista de navegação Recursos, clique em Provedores do OAuth.
- Na lista de provedores do OAuth, clique em MyNativeOAuthProvider para abri-lo.

- Na lista de navegação do provedor “Edit Native OAuth ”, clique em “ OpenID Connect ”.

- Na página OpenID Connect, selecione Enable OIDC (Ativar OIDC ).

- Se alguma configuração estiver selecionada na lista Tipos de resposta híbrida de suporte na página, limpe as seleções.
- Selecione Gerar automaticamente o conjunto da API do OIDC.
Essa opção atualiza sua API com o fluxo do OIDC.

Uma mensagem é exibida para avisar que você deve fornecer um objeto criptográfico de assinatura de token de ID ou uma chave de assinatura de token de ID. Neste tutorial, você fornece uma chave JWK (na próxima etapa).
- Clique
para copiar a chave a seguir e, em seguida, cole-a no campo “Chave de assinatura do token de identificação ”:{ "alg": "HS256", "kty": "oct", "use": "sig", "k": "o5yErLaE-dbgVpSw65Rq57OA9dHyaF66Q_Et5azPa-XUjbyP0w9iRWhR4kru09aFfQLXeIODIN4uhjElYKXt8n76jt0Pjkd2pqk4t9abRF6tnL19GV4pflfL6uvVKkP4weOh39tqHt4TmkBgF2P-gFhgssZpjwq6l82fz3dUhQ2nkzoLA_CnyDGLZLd7SZ1yv73uzfE2Ot813zmig8KTMEMWVcWSDvy61F06vs_6LURcq_IEEevUiubBxG5S2akNnWigfpbhWYjMI5M22FOCpdcDBt4L7K1-yHt95Siz0QUb0MNlT_X8F76wH7_A37GpKKJGqeaiNWmHkgWdE8QWDQ", "kid": "hs256-key" }
Essa chave não é segura e destina-se apenas ao uso neste tutorial.

- No campo Algoritmo de assinatura de token de ID, selecione HS256 como o algoritmo de assinatura para essa chave.

- Clique em Salvar.
Teste de segurança do OIDC
Observação: devido às restrições do Cross-Origin Resource Sharing ( CORS ), a ferramenta de teste de assembly não pode ser usada com os navegadores Chrome ou Safari na plataforma macOS Catalina.
Ao testar a nova segurança OIDC no painel de testes do API Manager, você segue os mesmos passos utilizados para testar o provedor nativo do OAuth. O painel de teste não exibe o token JWT recebido junto com o token de acesso; portanto, neste tutorial, você obterá o token JWT usando os comandos ` cURL ` para poder verificar se o token foi devolvido.
- Configure o painel de teste para chamar sua API:
- Na página Develop / findbranch, clique na guia Test no cabeçalho da página.
A API importada FindBranch já tem uma definição, que usa uma única política chamada Invoke para executar a API. Essa API está pronta para ser testada.
- Para ativar a API, clique em Target Configuration.

- Na janela Preferences (Preferências ), ative a opção Auto-publish (Publicação automática) para definir o status da API como on-line.

- Clique em Send (Enviar ).

- Se for exibida a mensagem Nenhuma resposta recebida, clique em Abrir o servidor.

Uma nova guia do navegador é aberta. Se for exibida uma mensagem de erro, ignore-a.
- Vá para uma janela de comando e use os comandos cURL para obter o token de acesso e o token JWT que permitem que você use a API:
Observação: O código de autorização que você recebe do provedor OAuth expira após alguns minutos. Para evitar a necessidade de repetir a solicitação, prepare os dois comandos para essa etapa o máximo possível antes de executar o primeiro comando.
- Execute o seguinte comando cURL para solicitar um código de autorização para a API:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "Authorization_URL\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=Client_ID"
Em que:
- O parâmetro cURL
-k permite que cURL execute sua operação mesmo em conexões de servidor inseguras.
- O parâmetro cURL
-i inclui cabeçalhos de resposta de protocolo na saída para que você possa visualizar a resposta na janela de comando.
- O cabeçalho de autorização especifica que você se autenticará no registro de usuário (o registro de usuário AuthURL que você criou) usando a autenticação Basic e fornece a senha ("pass") codificada em base64.
- O endereço
Authorization_URL é copiado do painel Teste.
- O
redirect_uri é o redirecionamento URL do OAuth que você configurou no aplicativo de teste Sandbox.
- O
scope especifica dois escopos, concatenados com +
: o escopo details da API que você acessará e o escopo do OIDC que o autoriza.
- O endereço
response_type é code porque você deseja receber um código de autorização.
- O endereço
Client_ID é copiado da seção Identification (Identificação)
do painel Test (Teste) e garante que você possa acessar o aplicativo de teste Sandbox.
Exemplo:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/authorize\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=01c43d1620e0c4e6ded0dec20b5655d9"
A resposta é semelhante ao exemplo a seguir:
HTTP/1.1 302 Found
Connection: Keep-Alive
Transfer-Encoding: chunked
X-RateLimit-Limit: name=default,100;
X-RateLimit-Remaining: name=default,93;
User-Agent: curl/7.55.1
Accept: */*
X-Client-IP: IP_address
X-Global-Transaction-ID: 12df8d855e7e18ee00000681
Location: https://example.com/redirect?code=AALxLnKixp9VIy3PvVKBwfbuTgNbwnZtHB6iS9b_BUw39UZZjUi2CeFdPYJZW0mgqNMtzFUhrsfu3FFiC9aGfHnJ3CqdIANqlo-v-DkQv7ELWw
Content-Type: text/xml
Date: Fri, 27 Mar 2020 15:17:02 GMT
- Copie o código de autorização (retornado no parâmetro
code ) para que você possa usá-lo na próxima etapa.
- Execute o seguinte comando cURL para trocar o código de autorização por um token de acesso e um token JWT:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "Token_URL"\
--data-urlencode "code=Authorization_code"\
--data-urlencode "client_secret=Client_Secret"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=Client_ID"
Em que:
- O endereço
Token_URL é copiado do painel Teste.
- O endereço
Authorization_code é copiado da resposta ao comando anterior.
- O endereço
Client_Secret é copiado da seção "Identification" (Identificação) do painel de teste.
- O endereço
grant_type é "authorization_code".
- O
scope especifica novamente dois escopos (separados por um espaço nesse comando porque os valores estão entre aspas).
- O endereço
Client_ID é copiado da seção "Identification" (Identificação) do painel de teste.
Exemplo:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/token"\
--data-urlencode "code=AAJ8zz5SvYgxFw0zY0fOxAOiDeaw_PLR6dAFh-ojXVjv-80TB25VGfj28J4Jf7jzgaWVVfLQuVTRSfUbp2hDjYsX9QmZHJOg5p_bfHFWBlQlLg"\
--data-urlencode "client_secret=d6634763de6c612ae69636d0fc948650"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=01c43d1620e0c4e6ded0dec20b5655d9"
A resposta é semelhante ao exemplo a seguir:
{"token_type":"Bearer","access_token":"AAIgMDFjNDNkMTYyMGUwYzRlNmRlZDBkZWMyMGI1NjU1ZDkm4gPMmFjgv2XXhI7t6LZ8BcIRaO_LvWirsNDlirJWi_7qqKGp_fr5py7yE_fHoD17ajAUJPPuUjsV5xj7go25JQjk_smS-AYvmPXRi99IxQ","scope":"openid details","expires_in":3600,"consented_on":1585322249,"id_token":"eyJraWQiOiJoczI1Ni1rZXkiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3NjE2OTRiYS1iYjYzLTRlNWQtOTc1ZS04NThkZGYxMmI2ZTkiLCJpc3MiOiJJQk0gQVBJQ29ubmVjdCIsInN1YiI6InVzZXIiLCJhdWQiOiIwMWM0M2QxNjIwZTBjNGU2ZGVkMGRlYzIwYjU2NTVkOSIsImV4cCI6MTU4NTMyNTg1MiwiaWF0IjoxNTg1MzIyMjUyLCJhdF9oYXNoIjoibDZYRDV5SjVuMTU1MkZSV19pR2k2USJ9.IO1RVPWV5zOhYGmCXUvG0_-9OO0guURPwaEbGOqCpCg"}
A resposta inclui dois tokens: o token de acesso e o JWT (denominado id_token
). O recebimento desses tokens confirma que você está autenticado por meio do OIDC e do seu provedor nativo de OAuth.
Observação: Se você receber uma mensagemInvalid requestcom um erro sobre um código expirado, isso significa que o código de autorização expirou. Retorne à subetapa a e repita o processo para obter um novo código de autorização e, em seguida, troque-o rapidamente pelo token de acesso e pelo token JWT.
- Retorne ao painel Test (Teste) e clique em Send (Enviar ) para executar a API.
Não é necessário colar nenhum código no painel de teste porque você usou o cURL para trocar tokens com o API Connect.
A resposta da API FindBranch exibe o código de status200
OKe as informações do cabeçalho da resposta, e o corpo contém os dados de cada agência bancária.

O Quê foi Feito Neste Tutorial
Neste tutorial, você concluiu as seguintes atividades:
- Adicionada segurança OIDC a uma API existente.
- Testou a segurança solicitando manualmente um código de autorização e trocando-o por um token de acesso mais um token JWT antes de chamar a API.