如何在FusionAuth OAuth登录页使用OTP实现跨域无密码SSO
FusionAuth OAuth 流程实现手机号+OTP无密码SSO方案
1 原生实现方案(推荐)
FusionAuth 本身内置无密码登录能力,完全适配你需要的跨域名SSO场景,不需要自行管理会话,安全性和可控性都远高于自定义会话方案,操作步骤如下:
- 第一步:在FusionAuth管理后台开启无密码登录,路径为「租户设置 -> 登录 -> 无密码配置」,验证方式选择短信OTP,绑定用户
mobilePhone字段作为唯一验证标识。 - 第二步:自定义OAuth登录页模板,删除默认密码输入框,仅保留手机号输入栏。用户提交手机号后自动调用
Send Passwordless Code API,触发FusionAuth内置的短信OTP发送逻辑(你也可以在后台配置自己的短信网关对接)。 - 第三步:用户输入收到的OTP提交后,FusionAuth自动完成身份校验,后续走标准OAuth Authorization Code Flow,向你配置的业务域名回调地址签发授权码。所有接入的业务域名都可以通过该标准流程获取AccessToken、IdToken,天然实现跨域名SSO,不需要处理JWT跨域传递的问题。
2 自定义会话方案的风险
你考虑的自行管理会话方案存在明确的安全和维护问题,不建议使用:
- 跨根域名场景下无法共享Cookie,如果你采用iframe postMessage、跨域localStorage读取等方式传递会话凭证,会大幅提升CSRF、XSS攻击的风险。
- 自定义会话无法和FusionAuth的统一权限管控能力打通,后续的会话过期、权限回收、多端登录管理都需要自行开发,维护成本很高,也容易出现逻辑漏洞。
3 扩展方案(适用于有自定义OTP逻辑需求的场景)
如果内置无密码流程无法匹配你的业务规则,可以通过「自定义登录页 + Lambda扩展」实现:
- 前端登录页托管在FusionAuth域名下,用户提交手机号后调用你自研的短信服务生成、发送OTP,将OTP值和过期时间写入对应用户的自定义数据字段。
- 配置FusionAuth登录校验Lambda,用户提交OTP后Lambda自动校验OTP有效性,校验通过后直接触发标准OAuth授权流程,后续SSO逻辑完全由FusionAuth接管,不需要额外开发会话管理能力。
内容的提问来源于stack exchange,提问作者Sajad
相关产品推荐
相关产品推荐

