Аутентификация firebase rest api с помощью номера телефона

Я использую PAW, чтобы попробовать и протестировать различные облачные функции, развернутые с Firebase. Приложение использует аутентификацию по телефону, однако в настоящее время практически нет документации о том, как выполнить аутентификацию по номеру телефона через REST API.

Я внес в белый список номер телефона для тестирования согласно инструкции здесь.

Похоже, что мне нужно вызвать метод verifyPhoneNumber, который я собрал вместе, что конечная точка REST API, которая мне нужна, находится в формате:

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

Теперь я застрял в попытке передать ожидаемые данные. Похоже, эта конечная точка ожидает объекты phoneNumber и applicationVerifier. Я собрал это вместе из соответствующего документация здесь.

Я пытаюсь сделать запрос, который выглядит так:

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 для тестирования?

Вы нашли для этого какое-нибудь решение?

mosid 05.05.2019 09:28

Нет, я не. Извините.

DjH 05.05.2019 12:53

Почему вы отправляете "applicationVerifier": {"type": "recaptcha"} в качестве значения запроса / Где вы его нашли. Я нашел запросы javascript и нашел там только параметр recaptchaToken:, но не могу получить его по запросу сценария

koa73 04.07.2019 17:24
11
3
3 153
3

Ответы 3

Для POST REST API вы должны передать токен reCAPTCHA вместо объекта captcha, который вы передаете. Вы можете получить токен в функции обратного вызова при создании 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

  1. Создайте запрос кода подтверждения (key - это переменная среды)

send verification code part 1send verification code part 2

  1. (но это необязательно) сделайте информацию сеанса динамическим значением ответа тела

enter image description here

  1. Создайте запрос на подтверждение номера телефона

enter image description here

  1. (опять же, необязательно) сделайте idToken также динамическим значением реакции тела

enter image description here

  1. Используйте динамическое значение idToken в любых других последующих запросах, которые вы выполняете к Firebase.

enter image description here

Лучшее в добавлении переменных в качестве динамических значений ответа тела - это то, что вы можете связать их в цепочку и вызывать их в последовательности:

enter image description here

Я все еще не понял, какое значение имеет sessioninfo и как мне это получить? Кроме того, какой инструмент используется для его создания?

bangbang 05.12.2020 17:30

Я использую PAW, клиент отдыха для MAC OS. Тот же самый, который использует OP и также указал, что использует в своем описании вопроса. sessionInfo - это имя параметра, который firebase ожидает для вызова verifyPhoneNumber.

Danut Pralea 07.12.2020 13:11

После большого количества исследований (я изо всех сил пытаюсь создать автоматические тесты для моего потока «входа в систему с телефона»), я наконец нашел решение для этого, основанное на ответе @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

Другие вопросы по теме