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

如何使用AWS Cognito实现统一SSO,对接多技术栈跨域名业务项目

方案一:OAuth 2.0 授权码模式(优先推荐)

这是跨域名、跨技术栈SSO的工业标准方案,完全不需要复用现有认证页面代码,适配你提到的所有技术栈,你已经开发完成的sso.mycompany.com认证页面不需要做任何改造,AWS Cognito原生支持这套流程:

  • 核心逻辑:你现有部署在sso.mycompany.com的认证服务直接作为OAuth2.0的授权服务器,各业务项目作为客户端
  • 接入流程:
    1. 提前为每个业务项目(projectx.com、projecty.com等)在Cognito后台分配唯一的client_id、client_secret,配置允许的回调地址
    2. 业务项目需要登录时,直接跳转/弹窗打开 https://sso.mycompany.com/login?client_id=xxx&redirect_uri=业务项目回调地址&response_type=code&state=随机串
    3. 用户在已开发的Cognito认证页完成登录后,Cognito会自动携带授权码code跳转到业务项目的回调地址
    4. 业务项目后端拿到code后,调用Cognito的token接口用code+client_id+client_secret换id_token、access_token,解析id_token就能拿到用户ID、邮箱、昵称等公开信息
  • 不同技术栈适配成本:
    • Laravel 直接用官方Passport扩展或者socialite提供的Cognito驱动,100行代码内即可完成接入
    • Wordpress 可以直接用OAuth客户端插件,无需写代码,后台配置参数即可接入
    • React 项目可以用react-oauth2-code-pkce库,前端配合后端简单配置即可
  • 优势:安全等级最高,支持token过期自动刷新,完全符合Cognito的原生设计,后续扩展权限、第三方接入都不需要改现有认证页
方案二:iframe + postMessage 轻量方案

如果你的业务项目都是内部可信项目,不想做完整的OAuth流程,可以用你原本设想的iframe方案,仅需要对现有Vue认证页做少量改造:

  • 改造&接入步骤:
    1. 提前在sso.mycompany.com的Cognito配置里,把所有业务域名加到CORS白名单
    2. 业务项目嵌入iframe时,url带一个origin参数,值为当前业务项目的域名,比如https://sso.mycompany.com/login?origin=https://projectx.com
    3. 现有Vue认证页中监听Cognito的登录成功事件,拿到用户的id_token、用户信息后,执行以下代码:
    // 首先校验origin参数在你预先配置的可信域名列表里,防止信息泄露
    const allowedOrigins = ['https://projectx.com', 'https://projecty.com', 'https://mycompany.com']
    const targetOrigin = new URLSearchParams(window.location.search).get('origin')
    if (allowedOrigins.includes(targetOrigin)) {
      window.parent.postMessage({
        type: 'SSO_LOGIN_SUCCESS',
        data: {
          idToken: 'xxx',
          userInfo: { userId: 'xxx', email: 'xxx', nickname: 'xxx' }
        }
      }, targetOrigin)
    }
    
    1. 业务项目的父页面监听message事件,接收认证成功的数据:
    window.addEventListener('message', (e) => {
      // 必须校验消息来源是你的SSO域名,防止伪造消息
      if (e.origin !== 'https://sso.mycompany.com') return
      if (e.data?.type === 'SSO_LOGIN_SUCCESS') {
        // 拿到用户数据后存到业务项目的本地存储/后端session,隐藏iframe即可
        const { idToken, userInfo } = e.data.data
      }
    })
    
  • 优势:改造成本极低,不需要调整业务项目的现有跳转逻辑,用户无需跳转在当前页即可完成登录
  • 注意点:一定要做两次origin校验,防止跨站信息泄露或伪造登录请求,不建议对外网开放的第三方项目使用这个方案

内容的提问来源于stack exchange,提问作者João

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:36:02