DEV Community

André Moriya
André Moriya

Posted on • Updated on

[pt-br] Acessando keycloak via Spring Netflix Zuul

Introdução

Olá pessoal!

Hoje eu vou escrever sobre um problema que estava tendo entre o Spring Netflix Zuul e o keycloak

O problema entre o Zuul e o keycloak

O que estava ocorrendo era o seguinte.

Devido a um cliente, precisamos fazer com que o keycloak fosse acessado externamente via o nosso gateway.

Porém ao fazer os testes, acessando essa tela de login do keycloak

image

Via o zuul e após informar o username e password estava recebendo o seguinte erro

spring-zuul-keycloak-problem

Porém não ocorria erro no container do zuul e nem do keycloak. O único erro que ocorria, aparecia no console do navegador, mas era apenas um erro 400 e mais nada.

O que fiz para solucionar

Pois bem, como pesquisando na internet não havia achado nada, fui para documentação do spring na parte 9.4. Cookies and Sensitive Headers

Nessa parte mostra que, por padrão, a sensitveHeaders há três valores: Cookie,Set-Cookie,Authorization, como mostra o exemplo da própria documentação:

application.yml

 zuul:
  routes:
    users:
      path: /myusers/**
      sensitiveHeaders: Cookie,Set-Cookie,Authorization
      url: https://downstream
Enter fullscreen mode Exit fullscreen mode

E na explicação abaixo, mostra o que fazer caso alguma rota precise dessas informações.

The sensitiveHeaders are a blacklist, and the default is not empty. Consequently, to make Zuul send all headers (except the ignored ones), you must explicitly set it to the empty list. Doing so is necessary if you want to pass cookie or authorization headers to your back end. The following example shows how to use sensitiveHeaders:

E foi isso que precisei fazer no meu application.properties, deixei conforme a documentação

zuul.routes.auth.sensitive-headers=
Enter fullscreen mode Exit fullscreen mode

Atualização

Quando você for tentar efetuar o login, e no console do navegador estiver apresentando esse erro:

Refused to display 'http(s)://host:port/' in a frame because it set 'X-Frame-Options' to 'deny'.
Enter fullscreen mode Exit fullscreen mode

Vá nas configurações do seu Spring security e no método

protected void configure(HttpSecurity http) throws Exception
Enter fullscreen mode Exit fullscreen mode

Adicione a linha:

http.headers().frameOptions().sameOrigin()
Enter fullscreen mode Exit fullscreen mode

Conclusão

Após passar um bom tempo pesquisando e lendo a documentação, consegui fazer o acesso

image

Qualquer dúvida que tenha, ou sugestões e críticas mande uma mensagem no twitter ou deixa aqui sua mensagem

Muito obrigado e até a próxima.

Discussion (2)

Collapse
wldomiciano profile image
Wellington Domiciano

Bom saber, obrigado por compartilhar.

Collapse
andremoriya profile image
André Moriya Author

Obrigado Wellington, espero ter ajudado ou te ajudar futuramente.

abraços