来自带有 Spring Security (Jhispter) 的 docker 容器的 Keycloak redirect_uri

Posted

技术标签:

【中文标题】来自带有 Spring Security (Jhispter) 的 docker 容器的 Keycloak redirect_uri【英文标题】:Keycloak redirect_uri from docker container with Spring Security (Jhispter) 【发布时间】:2021-10-31 19:21:56 【问题描述】:

您好,我在 docker 内的 keycloak 和 springBoot (jhipster) 有一些问题。

我希望我能让自己被理解

我想在本地启动我的所有组件,每个组件都在一个容器中。

我在 nginx 后面有一个角前端

image: ngnix-with-my-angular-project:latest
    volumes:
      - ./nginx/site.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8000:80"

在我的 ngnix conf 中,我有这样的代理通行证

location /oauth2 
   proxy_pass http://myprojectapp:8080/oauth2;


location /login 
   proxy_pass http://myprojectapp:8080/login;

在我的 keycloak docker conf 中,我添加了这个 env 变量:

PROXY_ADDRESS_FORWARDING=true

在我的应用程序中,名为 myprojectapp springBoot (jhispter) 我有以下配置

myprojectapp:
.
.
.
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=http://keycloak:9080/auth/realms/myproject

我的 Angular 项目在以下地址可用:http://localhost:8000/

我正在尝试通过 keycloak 进行连接

http://keycloak:9080/auth/realms/myproject/protocol/openid-connect/auth?response_type=code&client_id=web_app&scope=openid%20profile%20email&state=YYY&redirect_uri=http://myprojectapp:8080 /login/oauth2/code/oidc&nonce=XXX

我输入我的凭据,然后我被重定向到 myprojectapp 的 docker 的内部 url

http://myprojectapp:8080/login/oauth2/code/oidc?state=WWW&session_state=YYY&code=ZZZ

我不知道如何配置 redirect_uri 以重定向到我的 Angular 前端

redirect_uri=http://localhost:8000/login/oauth2/code/oidc

【问题讨论】:

Nginx 需要将X-Forwarded* 标头转发到应用程序,因此应用程序将知道反向代理。当然,应用程序必须能够处理该标头。例如。 tomgregory.com/… 【参考方案1】:

感谢@JanGaraj 我已经在我的 nginx conf 中添加了这个

server 
listen 80;
.
.
.
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;

我的正面暴露在 80 而不是 docker 中的 8000

image: ngnix-with-my-angular-project:latest
    volumes:
      - ./nginx/site.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"

以下配置不会将我重定向到 8000

proxy_set_header X-Forwarded-Port $proxy_protocol_port;

对我来说已经足够了,谢谢

【讨论】:

以上是关于来自带有 Spring Security (Jhispter) 的 docker 容器的 Keycloak redirect_uri的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot + spring security - 如何阻止应用层上的CORS请求?

带有 Spring 会话的 Spring Security SAML

带有 Spring Security 登录和身份验证的 Angular

带有 OpenIDAuthenticationFilter 问题的 Spring Security

带有 spring-boot 和 spring-security 的 JWT

带有 Spring Security 的 Spring REST 不接受凭据