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

能否将Azure AD、Keycloak与Kong集成?实现React前端及Java后端认证

方案可行性确认

这种架构完全可行,核心逻辑是Keycloak作为统一认证层集成Azure AD作为身份提供商(IdP),Kong作为API网关负责拦截请求并验证来自Keycloak的令牌,同时为React前端和Java后端提供一致的认证入口。

具体实现步骤

1. 完成Keycloak与Azure AD的集成

先确保Keycloak成功对接Azure AD,这是整个方案的基础:

  • 在Keycloak控制台创建新的Identity Provider,选择OpenID Connect v1.0类型
  • 配置Azure AD的OIDC参数:
    • 客户端ID:Azure AD应用注册生成的客户端ID
    • 客户端密钥:Azure AD应用注册生成的客户端密码
    • 授权端点:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
    • 令牌端点:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
    • 用户信息端点:https://graph.microsoft.com/oidc/userinfo
  • 同步Keycloak与Azure AD的重定向URI,确保两者配置一致
  • 测试登录流程:通过Keycloak登录页选择Azure AD登录,确认可正常获取用户信息

2. 配置Kong网关的认证插件

Kong使用OpenID Connect插件对接Keycloak,验证请求中的JWT令牌:

  • 安装并启用Kong的openid-connect插件(社区版用此插件,企业版可直接用keycloak插件)
  • 配置核心参数:
    • issuer:Keycloak的OIDC issuer地址,格式为http://{keycloak-host}/auth/realms/{realm-name}
    • client_id:Keycloak中为Kong创建的专用客户端ID(需开启Service Accounts Enabled)
    • client_secret:对应客户端的密钥
    • redirect_uri:Kong的回调地址,例如http://{kong-host}/callback
    • introspection_endpoint:Keycloak的令牌校验地址,格式为http://{keycloak-host}/auth/realms/{realm-name}/protocol/openid-connect/token/introspect
  • 将插件绑定到需要保护的API或路由上

3. React前端的认证集成

前端通过Keycloak JS适配器实现登录,获取令牌后携带到请求中:

  • 安装keycloak-js依赖
  • 初始化Keycloak实例并处理登录:
    import Keycloak from 'keycloak-js';
    
    const keycloak = new Keycloak({
      url: 'http://{keycloak-host}/auth',
      realm: '{realm-name}',
      clientId: '{frontend-client-id}' // Keycloak中为React创建的客户端,启用Authorization Code Flow + PKCE
    });
    
    keycloak.init({ onLoad: 'login-required' }).then(authenticated => {
      if (authenticated) {
        localStorage.setItem('access_token', keycloak.token);
      }
    });
    
    // 请求Kong时携带令牌
    const fetchData = async () => {
      const token = localStorage.getItem('access_token');
      const response = await fetch('http://{kong-host}/api/xxx', {
        headers: { Authorization: `Bearer ${token}` }
      });
    };
    
  • 处理令牌过期:通过keycloak.updateToken()方法自动刷新令牌

4. Java后端的认证校验

后端有两种认证方式可选:

  • 方式一:依赖Kong前置校验:后端无需额外处理认证,仅通过Kong注入的X-Userinfo头获取用户信息,同时通过IP白名单或X-Forwarded-For头限制请求来源为Kong
  • 方式二:后端自行校验:使用Keycloak Java适配器验证令牌:
    • 引入keycloak-spring-boot-starter依赖
    • 配置application.yml:
      keycloak:
        auth-server-url: http://{keycloak-host}/auth
        realm: {realm-name}
        resource: {backend-client-id}
        bearer-only: true
      
    • 在接口上添加@RolesAllowed或@PreAuthorize注解实现权限控制
关键注意事项
  • 确保Keycloak、Kong、前端、后端的时钟同步,避免令牌过期校验出错
  • 为不同客户端配置合适的认证流程:前端用Authorization Code Flow + PKCE,Kong用Client Credentials Flow,后端用Bearer-only模式
  • 开启Kong插件的令牌 introspection 功能,拦截无效/过期令牌
  • 测试端到端流程:前端登录→获取令牌→请求Kong→Kong验证令牌→转发到后端→后端处理请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:32:40