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
相关产品推荐
相关产品推荐

