You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak与Google OAuth 2.0重定向URI不匹配问题求助

问题描述

已注册域名https://fm.xxxxx.com,使用Nginx作为反向代理负载均衡Keycloak,当前Nginx配置如下:

server {
        listen 80;
        listen [::]:80;
        server_name fm.xxxxx.com;
        return 301 https://fm.xxxxx.com;
}

server {
  listen 443 ssl;
  server_name fm.xxxxx.com;

  ssl_certificate /etc/nginx/certificate/xxxxx.crt;
  ssl_certificate_key /etc/nginx/certificate/xxxxx.key;

 location /realms/fm-users/ {
    proxy_read_timeout 90;
    proxy_pass http://fm-keycloak:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Scheme $scheme;

    client_max_body_size 30m;
 }

 location /resources/ {
    proxy_read_timeout 90;
    proxy_pass http://fm-keycloak:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Scheme $scheme;

    client_max_body_size 30m;
 }

配置Google身份提供商时,Keycloak生成的重定向URI不被Google认可,且无法在Keycloak界面修改该URI;改用域名配置后登录出现Error 400: redirect_uri_mismatch错误。站点使用HTTPS,Keycloak内部用HTTP运行。尝试在Keycloak的import.json及数据库identity_provider_config表中添加redirectUri参数均无效,本地用127.0.0.1运行正常,需要解决生产环境下的重定向URI问题,询问是否需要调整Nginx配置或有其他解决办法。

解决方案

1. 配置Keycloak的前端URL(核心解决步骤)

Keycloak不知道外部访问的完整HTTPS域名,才会生成错误的内部HTTP重定向URI,得这么改:

  • 若使用standalone模式,打开standalone.xml或standalone-ha.xml,找到<subsystem xmlns="urn:jboss:domain:undertow:12.0">下的<server name="default-server">,修改http-listener配置:
<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="true"/>

同时在启动参数中添加:

-Dkeycloak.frontendUrl=https://fm.xxxxx.com/

(注意:Keycloak 17+版本默认路径为/,旧版本为/auth,请根据实际版本调整路径)

  • 若使用Docker部署,直接在启动命令中添加环境变量:
-e KEYCLOAK_FRONTEND_URL=https://fm.xxxxx.com/
-e PROXY_ADDRESS_FORWARDING=true

此设置会让Keycloak生成基于外部HTTPS域名的重定向URI,而非内部HTTP地址。

2. 补全Nginx的代理路径

当前Nginx仅代理了/realms/fm-users/和/resources/,但Google回调会请求/realms/fm-users/broker/google/endpoint这类路径,缺少/broker/代理会导致请求失败或重定向URI错误。可选择两种方式调整:

  • 若域名仅用于Keycloak,直接代理根路径:
location / {
    proxy_read_timeout 90;
    proxy_pass http://fm-keycloak:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Scheme $scheme;

    client_max_body_size 30m;
}
  • 若域名还有其他服务,至少补充/broker/路径的代理:
location /broker/ {
    proxy_read_timeout 90;
    proxy_pass http://fm-keycloak:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Scheme $scheme;

    client_max_body_size 30m;
}

3. 在Google Cloud控制台配置正确的重定向URI

登录Google Cloud控制台,找到对应的OAuth 2.0客户端ID,添加以下重定向URI:
https://fm.xxxxx.com/realms/fm-users/broker/google/endpoint
(旧版Keycloak需添加/auth前缀,即https://fm.xxxxx.com/auth/realms/fm-users/broker/google/endpoint)
确保该URI与Keycloak生成的完全一致,包括HTTPS协议和完整路径。

4. 验证Keycloak的反向代理参数

进入Keycloak管理界面,选择fm-users realm,点击Realm Settings -> General -> Advanced,确认:

  • Frontend URL设置为https://fm.xxxxx.com/(对应实际路径)
  • Proxy选项设置为edge

完成以上配置后,重启Keycloak和Nginx,测试Google登录流程即可解决redirect_uri_mismatch错误。

内容的提问来源于stack exchange,提问作者user22958704

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:07:50