rest - Firebase REST API 使用电话号码进行身份验证

标签 rest api firebase firebase-authentication

我正在使用 PAW 来尝试和测试使用 Firebase 部署的不同云功能。该应用程序使用电话身份验证,但目前几乎没有关于如何通过 REST API 完成电话号码身份验证的文档。

我已按照 instructions here 将电话号码列入白名单进行测试。

看来我需要做的是调用 verifyPhoneNumber 方法,我已经拼凑出我需要的 REST API 端点的格式:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}

现在我陷入困境的是尝试传递预期的数据。看起来此端点需要一个 phoneNumber 和一个 applicationVerifier 对象。我从相应的 documentation here 中将其拼凑在一起.

我尝试提出如下请求:

POST /identitytoolkit/v3/relyingparty/verifyPhoneNumber?key={WEB_API_KEY}
Content-Type: application/json; charset=utf-8
Host: www.googleapis.com
Connection: close
User-Agent: Paw/3.1.7 (Macintosh; OS X/10.13.6) GCDHTTPRequest
Content-Length: 73

{"phoneNumber":"+18035551111","applicationVerifier":{"type":"recaptcha"}}

我收到的回复是:

HTTP/1.1 400 Bad Request
Vary: X-Origin
Vary: Referer
Content-Type: application/json; charset=UTF-8
Date: Thu, 13 Sep 2018 16:35:33 GMT
Server: ESF
Cache-Control: private
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
Accept-Ranges: none
Vary: Origin,Accept-Encoding
Connection: close

{
  "error": {
    "code": 400,
    "message": "MISSING_SESSION_INFO",
    "errors": [
      {
        "message": "MISSING_SESSION_INFO",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}

我不确定此时我做错了什么,因为我的文档已经用完了,现在只是盲目猜测参数。如何通过 REST API 通过白名单电话号码进行身份验证以进行测试?

最佳答案

经过大量研究(我正在努力为“使用电话登录”流程创建自动化测试),我终于根据 @Danut Pralea 的答案找到了解决方案。希望它对 future 的人们有所帮助:)

考虑到您的电话号码已列入白名单(如问题中所述),第一步是调用 firebase 发送验证码:

POST /v1/accounts:sendVerificationCode?key={WEB_API_KEY} HTTP/1.1
Host: identitytoolkit.googleapis.com:443
Content-Type: application/json
Content-Length: 39

{
    "phoneNumber": "{PHONE_NUMBER}"
}

响应将是sessionInfo,如下所示:

{
    "sessionInfo": "ALiwoWJhYJgtFav1DKc0yBoTwcjjiyQNu240eDJ76GmlH-2i3RmHAYamaPkx3rjEmOBcgrua5QfLw8Nrn_QwjVPO6N09fYsiWQha0-5o2Jb5Hwqxkw7qwsl6YK0gotZ16HmiwqJkyd-stAXTVU1ZIBUwfrFqZmFY7g"
}

然后,下一步是使用代码(与白名单中使用的相同)和 session 信息在 Firebase 中登录:

POST /v1/accounts:signInWithPhoneNumber?key={WEB_API_KEY} HTTP/1.1
Host: identitytoolkit.googleapis.com:443
Content-Type: application/json
Content-Length: 207

{
    "sessionInfo": "ALiwoWJhYJgtFav1DKc0yBoTwcjjiyQNu240eDJ76GmlH-2i3RmHAYamaPkx3rjEmOBcgrua5QfLw8Nrn_QwjVPO6N09fYsiWQha0-5o2Jb5Hwqxkw7qwsl6YK0gotZ16HmiwqJkyd-stAXTVU1ZIBUwfrFqZmFY7g",
    "code": 123456
}

就是这样!响应将类似于:

{
    "idToken": "idToken",
    "refreshToken": "refreshToken",
    "expiresIn": "3600",
    "localId": "localId",
    "isNewUser": false,
    "phoneNumber": "{PHONE_NUMBER}"
}

更多信息参见官方文档:https://cloud.google.com/identity-platform/docs/reference/rest/v1/accounts

关于rest - Firebase REST API 使用电话号码进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318300/

相关文章:

REST:当一个请求改变多个实体的状态时返回什么?

json - 快速获取 Json 5

java - spring mvc 和 Jersey 的区别

java - Azure 发布管道未从nestedStack.yml 文件中获取变量

javascript - 如何获取 Cloud Firestore 查询返回的数据?

java - 无法POST,HttpURLConnection默认为GET

javascript - Angular $resource 调用未提供完整数据

javascript - 创建用户API Mysql自增bug

android - 删除数据时 FirebaseRecyclerAdapter 不更新项目索引

java - 如何在 Android 中使用 firebase admin sdk 使用电子邮件和密码登录