Как получить доступ к oauthIdToken, возвращенному из Firebase? - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь получить oauthIdToken результата, полученного при подписании с firebase с использованием signInWithCredential . После успешного входа в систему я получаю следующее:

user Object {
  "additionalUserInfo": bg {
    "isNewUser": false,
    "profile": Object {
      "at_hash": "aWhmsdfeef32388EYD8YA",
      "aud": "100423452193-gvmasfasdfasdfasfda7ee0.apps.googleusercontent.com",
      "azp": "100406623293-gvmt0erkkob6asdfadfi7ee0.apps.googleusercontent.com",
      "email": "fake@gmail.com",
      "email_verified": true,
      "exp": 1579142529,
      "family_name": "last name",
      "given_name": "first name",
      "iat": 1579138929,
      "iss": "https://accounts.google.com",
      "locale": "en",
      "name": "first last name",
      "nonce": "Ow_sVcasdf50LdbHdTaro",
      "picture": "https://lsfasfa.googleusercontent.com/-iKnasfasdf34/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3re9asdfas7_Erg/s96-c/photo.jpg",
      "sub": "100824234342680931658",
    },
    "providerId": "google.com",
  },
  "credential": Object {
    "oauthAccessToken": "ya29.Il-5B47AOKYEQ5NYikv93gYyyhWu_2FEHEaadfaasfasdfasdfBVJCDXG3HJ9MdqalyyxvZ-6jMoqRsaGzhPUg6Cg862vF25xocHR6rnbh_-HuP2MMey4s59Gx8fXLwgQ99dQ",
    "oauthIdToken": "eyJhbGciOiJSUzsdfagyZDgyMDQwM2VlODUxOGM0YWFiYjJiOWZlMzEwY2FjMTIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291joiZW4iLCJpYXQiOjE1NzkxMzg5MjksImV4cCI6MTU3OTE0MjUyOX0.i-YiWbokasfiP_-xWCHJUyT_aLWp7eb3YCE6mzRUbbuKsdfsdfHptczrMXB5vMZY_5JFp8ZD2zxoNlvhTpuMY3B_zw_5Irk6HzuHGHXyAgzNJjh5n6cYR8gOiOsfsdfcKATpHcG7H_gOCwns_fI44I820qcmrogaEXuW-i3u9X5aXbTYqW5EaZQvQzuHkYHO2VWoktOTZsfsdfsfOaYYGU-tqW-ygAB_aWD7VPjIuUY4ySPF4k6IRR1x3ZysfdsdfdGGarX3isPGxMrDMtbRtsfsdfVaKsZdRtCpbfNUbFO8NR6x-pIvKsdfA",
    "stsTokenManager": Object {
      "accessToken": "eyJhbGciOiJSUzI1NiIsASDAFASFVmZTJlZDQyOWI3MzY0M2Y2NTEiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoicmVudGVyaWkgcmVudGVyaGUuY29tIn19.n7z7HlL9lU7VEOA4fGIHvE9UMLSu5uo1rpfTm6m-N5A8CaKQaDu96sAvsG8iOVx8PYnytadffsafSRHyJoS0bzZbpQS6-YItdM5bIPxLMTFYEb0-Ho-tPnhRBSfWfPqJnK0c18YBFtHTG-0TvLNppmuZFG9AJjZZr0ASIkoOWmkI0gdOUAKBkutwMb3oitxeorT-pUdtKB5Rk23ekewz05oi7R5TI4xpBX5LsPvqaCqI4S5wxHe_BilRiiMhxd_lINdWftEkpctKSApJubML7mB9A",
      "apiKey": "AIzaSysdfsdfsiWO7_2buk",
      "expirationTime": 1579142530341,
      "refreshToken": "AEu4IL01n_G6c4_Wg6fzseXRGPJHEAJnhzw7GLZVTS4RICikJ8PUgmmtNWXjcttOSbmYVCJDzGluUvTNKPHa4aS8gG0R3ijmrvPpcyJFPWZ5dRRDIlzxuoSyt70mewdRYgK4Eao7W21550slj7qHu8ZT_1bACJb31e_y7UnL2QjJEuvKwcWII8v8mgMPpYC2RH6fKg0Xrv9XLBgTxso25KfDrlfHBfYp4t35CzcVqODl71663_xV0WHhQ5gpv1hW0N39MMU5S0UEbQ_FnMmcJUFygaRvHndj2yNVhGwv_Re0uut3hUanPO_bo6OT4VEgIEEZ6cuiq8jzpH_T7d6bwI9eLZNS6IC1Fu8EJFmUWAtsdyBErq0s39gj2uta0uqLIGP_wlP5F_eDiw",
    },
    "tenantId": null,
    "uid": "KlGB4adfadfn9ktr1",
  },

Попытка доступа к oauthIdToken с помощью console.log(result.credential.oauthIdToken) неизбежно приводит к null, даже если переменная явно присутствует. Я предполагаю, что это похоже на получение accessToken в stsTokenManager, где вы можете получить его только с помощью метода getIdToken(), а credential.stsTokenManager.accessToken обеспечивает null.

Как получить доступ к oauthIdToken?

1 Ответ

1 голос
/ 06 февраля 2020

Мне потребовался день, чтобы разобраться с этим. Я смотрел на использование обещаний и нашел ответ, зарегистрировав части объекта.

Вывод распечатки результирующего объекта очень запутанный. Проблема в том, что у представления объекта JSON есть ключи, которые не соответствуют переменным на объекте. Если вы используете console.log(JSON.stringify(result.credential)) вместо console.log(JSON.stringify(result)), вы увидите разные имена переменных.

Чтобы увидеть OAuth Identity Token, используйте console.log(console.log(result.credential.idToken)) без префикса oauth. Точно так же токен доступа не имеет префикса oauth.

Важно знать, что в мире Google / Firebase существует два разных типа токенов идентификации. Идентификационный токен Firebase получен из user.getIdToken(). Он отправляется на сервер, чтобы позволить клиенту быть проверенным. Его аудитория в идентификаторе проекта. Другой тип, который является предметом вопроса, это маркер идентификации, сгенерированный поставщиком аутентификации. Если провайдером аутентификации является Google, то это маркер, который вы должны использовать для аутентификации в облачных функциях и сервисах Cloud Run. Маркер необходимо отправить в заголовке Authorization: Bearer idtoken по запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...