如何使用Identity Platform REST API实现SSO与手机号用户登录?
一、手机号登录流程
手机号登录分为发送验证码和验证验证码并获取身份令牌两个步骤:
1. 发送验证码
向以下端点发送POST请求:https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode?key=YOUR_API_KEY
请求体示例:
{ "phoneNumber": "+1234567890", "recaptchaToken": "你的reCAPTCHA验证令牌" }
注:reCAPTCHA令牌需通过前端集成reCAPTCHA v2或v3获取,用于防止机器人请求。
2. 验证验证码并登录
用户输入验证码后,向以下端点发送POST请求:https://identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber?key=YOUR_API_KEY
请求体示例:
{ "phoneNumber": "+1234567890", "verificationCode": "用户输入的6位验证码", "returnSecureToken": true }
成功响应会返回idToken(身份令牌)、refreshToken等,用于后续身份验证。
二、SSO登录流程(以OAuth2提供商为例)
SSO登录需要先引导用户完成第三方授权,再用授权码交换Identity Platform的身份令牌:
1. 引导用户到第三方授权页面
构造授权URL(以Google为例),参数需包含:
client_id:Identity Platform控制台创建的Web客户端IDredirect_uri:你的回调URL(需在Identity Platform控制台配置)response_type:codescope:openid email profile
2. 用授权码交换身份令牌
用户授权后,第三方会重定向到你的回调URL并携带code参数,将该授权码发送到以下端点:https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=YOUR_API_KEY
请求体示例:
{ "requestUri": "你的回调URL", "postBody": "code=用户授权码&client_id=你的Web客户端ID&redirect_uri=你的回调URL", "returnSecureToken": true }
成功响应同样会返回idToken等身份凭证。
三、完整文档位置
你可以查看官方的Identity Platform Accounts REST API参考文档,其中包含所有登录相关的端点细节,包括手机号、OAuth2提供商、密码登录等全场景的实现说明。
四、关于Dart/Flutter依赖的说明
直接封装上述REST请求为Dart包是完全可行的方案,既可以同时支持Dart和Flutter项目,也能避免引入Firebase SDK带来的依赖冲突问题。你可以基于Dart的http包来实现这些HTTP请求的封装。
内容的提问来源于stack exchange,提问作者anonymous-dev

