【问题标题】:Firebase REST API Authenticate With Phone NumberFirebase REST API 使用电话号码进行身份验证
【发布时间】:2018-09-13 16:47:41
【问题描述】:

我正在使用 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 通过白名单电话号码进行身份验证以进行测试?

【问题讨论】:

  • 你找到解决办法了吗?
  • 不,我没有。对不起。
  • 为什么你发送 "applicationVerifier":{"type":"recaptcha"} 作为请求值/你在哪里找到它。我找到了 javascript 请求并找到了 recaptchaToken: 参数,但无法通过脚本请求获取它

标签: rest api firebase firebase-authentication


【解决方案1】:

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

考虑到您的电话号码已被列入白名单(如问题中所述),第一步是调用 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"
}

然后,下一步是在 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

【讨论】:

  • firebase 是否提供官方 API 用于发送验证码(sendVerificationCode)到手机?
  • 我想在 firebase 的“signInWithPassword”API 中获取“unobfuscatedPhoneInfo”值。你能帮助我吗 ?为用户启用了两个因素
  • 嗯我不认为我们可以绕过两因素身份验证。无论如何,我认为您应该为您的问题创建另一个问题@ManishVadher 添加更多详细信息,这样我们可以以更好的方式为您提供帮助:)
【解决方案2】:
  1. 创建您的验证码请求(key 是一个环境变量)

  1. (但这是可选的)将会话信息设为正文响应动态值

  1. 创建您的验证电话号码请求

  1. (同样,可选)使idToken 也成为身体响应动态值

  1. 在您对 Firebase 执行的任何其他后续请求中使用 idToken 动态值

将变量添加为身体响应动态值的最佳部分是您可以链接它们并按顺序调用它们:

【讨论】:

  • 我还是不明白 wat 是 sessioninfo 的值,我是怎么得到它的?另外,使用什么工具来生成这个?
  • 我正在使用 PAW,一个 MAC OS 休息客户端。 OP使用的相同,并且还指出他在问题描述中使用。 sessionInfo 是 firebase 期望为 verifyPhoneNumber 调用的参数的名称
【解决方案3】:

对于 REST API POST,您必须传递 reCAPTCHA 令牌,而不是传递的验证码对象。创建 RecaptchaVerifier 时可以在回调函数中获取令牌

        window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('my_btn', {
            'size': 'invisible',
            'callback': function(response) {
                // reCAPTCHA solved, allow signInWithPhoneNumber.
                recaptchaToken = response;
                .....
            }
        });            

这篇文章帮助了我 - https://medium.com/@shangyilim/verifying-phone-numbers-with-firebase-phone-authentication-on-your-backend-for-free-7a9bef326d02

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多