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

AWS Amplify federatedSignIn支持多SAML提供商单登录按钮实现问询

问题解答

核心结论

AWS Amplify 的 Auth.federatedSignIn() 方法的 customProvider 参数原生不支持传入多个身份提供商名称,无法直接通过传多值的方式实现单个按钮适配多SAML IdP的需求,可通过以下两种可行方案实现:

方案1:前置路由逻辑 + 动态传入目标提供商

这是最常用的轻量实现方案,无需额外修改AWS侧配置:

  • 提前在代码中维护邮箱后缀与SAML提供商名称的映射关系
  • 用户点击登录按钮前,先让用户输入企业邮箱,根据邮箱后缀匹配对应的SAML提供商
  • 匹配完成后再调用 Auth.federatedSignIn() 传入匹配到的提供商名称即可
    示例代码:
// 提前维护域名和Cognito中配置的SAML提供商名称的映射
const idpMap = {
  "company1.com": "Company1_SAML_IdP",
  "company2.com": "Company2_SAML_IdP",
  "company3.com": "Company3_SAML_IdP"
}

// 单个登录按钮的点击事件
const handleSingleLoginBtn = async () => {
  const userEmail = document.getElementById("email-input").value.trim()
  const emailSuffix = userEmail.split("@")[1]
  const targetIdp = idpMap[emailSuffix]

  if(!targetIdp) {
    alert("当前邮箱域名暂不支持企业登录")
    return
  }
  await Auth.federatedSignIn({ customProvider: targetIdp })
}

方案2:对接统一身份代理IdP

如果不需要做域名路由,希望点击按钮后由用户自行选择登录的SAML提供商,可配置一个统一的身份代理IdP:

  • 将所有需要对接的SAML提供商都配置到这个代理IdP中
  • Cognito侧仅添加这个代理IdP作为唯一的SAML身份提供商
  • 前端调用 Auth.federatedSignIn() 时仅传入这个代理IdP的名称即可,由代理IdP侧展示多个SAML登录选项供用户选择

注意事项

  • 所有用到的SAML身份提供商名称必须和Cognito用户池中配置的名称完全一致,大小写敏感
  • 不可向 customProvider 参数传入数组、多值拼接字符串等格式,Amplify与Cognito原生不识别该类格式,会直接抛出参数错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03