Skip to main content

Configurando o Keycloak com o Kong

Requisitos​

  • Certifique-se de que o ambiente Kong estĆ” configurado executando:

    make kong.up
  • Certifique-se de que o arquivo /etc/hosts contenha as seguintes entradas:

    127.0.0.1 api.freterapido.local       # Rota de APIs
    127.0.0.1 login.shippon.local # Acesso ao Keycloak
    127.0.0.1 kong.freterapido.local # Acesso ao Kong

Etapas de Configuração​

1. Acesse o Kong Manager​

  • Acesse via navegador: http://kong.freterapido.local ou http://localhost:8002.

2. Crie um ServiƧo​

  • Navegue atĆ© "Gateway Services".

  • Clique em "Add a Gateway Service". Tela de Gateway Services

  • Preencha os seguintes dados:

    • Nome: api-external
    • Protocolo: http
    • Host: api-external
    • Porta: 80
    • Caminho: /api-external Tela de Gateway Services
  • Salve a configuração.

Repita este processo para os demais serviƧos e APIs expostas.

3. Crie uma Rota​

  • Na aba "Routes" do serviƧo api-external, clique em "+ New Route". Tela de Rotas

  • Configure:

    • Nome: api-external
    • Caminhos: /api-external
    • Hosts: api.freterapido.local Tela de Rotas
  • Salve.

4. Adicione o Plugin JWT​

  • Acesse "Plugins" e clique em "+ New Plugin". Seleção de Plugin JWT

  • Selecione "JWT" e ative o plugin. Seleção de Plugin JWT2

  • Salve.

5. Configure o JWT​

  • Configure o campo "Claims To Verify" com exp. Configuração de JWT
  • Salve.

6. Crie um Consumidor​

  • Acesse "Consumers" e clique em "+ New Consumer". Tela de Consumidores

  • Preencha os campos necessĆ”rios e salve. Tela de Consumidores

7. Ative o Plugin JWT no Consumidor​

  • Acesse o consumidor criado.
  • No menu lateral, selecione "Credentials".
  • Clique em "+ New JWT Credential". Tela de Consumidores

Deixe esta tela aberta para uso posterior.

Keycloak​

Acesse login.shippon.local com:

  • UsuĆ”rio: admin
  • Senha: admin

8. Crie um Realm​

  • Acesse "Create realm". Criação de Realm

  • Nome: kong Criação de Realm

  • Certifique-se de que estĆ” habilitado e clique em "Create".

9. Crie um Client​

  • Em "Clients", clique em "Create client". Criação de Client

  • Preencha:

    • Client type: OpenID Connect
    • Client ID: kong-client
    • Clique em "Next" Criação de Client

9.1 Configure PermissƵes​

  • Aba "Capability config": habilite "Client authentication" e "Standard flow". Configuração de PermissƵes

9.2 Crie Escopos e Mappers​

  • Clique em "Create client scope". Client Scope

  • Preencha:

    • Nome: kong-fr
    • Descrição: Scope customizado Frete RĆ”pido
    • Tipo: PadrĆ£o
    • Protocolo: OpenID Connect
    • Ative: "Exibir na tela de consentimento" e "Incluir no token" Scope
  • Salve.

Mappers​
  • Aba "Mappers": clique em "Create". Mappers

  • Tipo: User attribute

    • Nome: company_token
    • Atributo: company_token
    • Claim: company_token
    • JSON Type: String
    • Ative: ID Token, Access Token, Userinfo Mapper
  • Repita para: company_id, company_type, user_api_id

Escopo: groups​
  • Adicione mais um escopo: "Group Membership" Group

  • Nome: groups Group

  • Resultado final: Scopes Final

9.3 Atribua Escopos ao Cliente​

  • Aba "Client scopes" do kong-client: clique em "Add client scope".

  • Adicione profile e kong-fr, marcando como "Default". Client Scopes

  • Salve.

10. Crie um UsuĆ”rio​

  • Acesse "Users" > "Create new user" UsuĆ”rio
  • Nome de usuĆ”rio: freterapido UsuĆ”rio
  • Salve.

11. Defina a Senha​

  • Aba "Credentials": clique em "Set password" Senha

  • Defina: 12345678, desmarque "Temporary" Senha

  • Salve.

  • Acesse aba "Attributes" e preencha conforme esperado. Atributos

12. Obtenha a Key (KID)​

  • "Realm settings" > aba "Keys" Keys
  • Anote o Kid da chave RS256

13. Copie a Chave PĆŗblica​

  • Clique em "Public key" da chave RS256, copie e feche Chave PĆŗblica

14. Copie o Client Secret​

  • Aba "Credentials" do kong-client, copie o secret Client Secret

15. Configure o Plugin no Kong​

  • Retorne ao Kong e preencha:

    1. key (Kid) do passo 12

    2. secret do passo 14

    3. Algoritmo: RS256

    4. Chave pĆŗblica (em formato:

      -----BEGIN PUBLIC KEY-----
      {chave}
      -----END PUBLIC KEY-----

      )

    JWT Kong

16. Configure os Atributos​

  • (Descrever etapa caso "asd" seja um marcador temporĆ”rio) Atributos

Verificação​

Obtenha um Token JWT​

curl --request POST \
--url https://login.shippon.local/realms/kong/protocol/openid-connect/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=password \
--data client_id=kong-client \
--data client_secret={Client secret do passo 14} \
--data username=freterapido \
--data password=12345678

FaƧa uma Requisição Autenticada​

curl --request POST \
--url 'https://api.freterapido.local/api/external/transportadora/v1/quotes/FR2505077IGLS/occurrences' \
--header 'Authorization: Bearer {access_token}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"cnpj_remetente": "25438296000158",
"ocorrencia": 1,
"data_hora": "2024/04/08 17:00:00",
"mensagem": "teste"
}'

Se tudo estiver correto, a API externa deve responder conforme esperado.