Где вы получаете/находите JWT-Secret от firebase?

Я использую firebase для своих веб-/мобильных приложений, и теперь у меня есть внутренний API, который я также хочу использовать. API требует токен JWT для аутентификации запросов, и для его настройки мне нужно указать секрет JWT, который используется для шифрования/дешифрования токена.

Я считаю, что в firebase я получаю токен, используя const token = await firebase.auth().currentUser.getIdToken(); Это то, что я передаю в API.

Однако я так и не понял, где взять JWT-секрет для настройки? Я попробовал ключ API, который отображается в консоли Firebase, я также попробовал ключи сервера/клиента, найденные в моей консоли по адресу https://console.developers.google.com.

однако, несмотря ни на что, я получаю JWSInvalidSignature при попытке сделать запросы к вызову API.

У кого-нибудь это работает? Где я могу получить секрет JWT от firebase для настройки на серверной части API? Заранее спасибо.

Вот подробности: 1. Я использую службу под названием postGrest, которая автоматически создает веб-API поверх базы данных postgres. Чтобы аутентифицировать запросы, вы настраиваете службу, указав пользовательское утверждение под названием «роль», а также вам необходимо указать секрет JWT, чтобы он мог декодировать токен.

Вот мой простой вызов API:

           const fetchdata = async () => {
           const token  = await firebase.auth().currentUser.getIdToken();

        let axiosConfig = {
           headers: {
              'Authorization': 'Bearer' + token
                   } 
             }
       const data = await axios.get(`http://localhost:8080/users`, 
       axiosConfig);
}

Также обратите внимание, что я могу имитировать это в командной строке bash, используя следующий код: Обратите внимание, что я получаю токен из getIdToken() выше.

   export TOKEN="eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ2YzM5Mzc4YWVmYzA2YzQyYTJlODI1OTA0ZWNlZDMwODg2YTk5MjIiLCJ0eXAiOiJKV1QifQ.eyJ1c2VyaWQiOiI1NSIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS9wb3N0Z3Jlc3QtYjRjOGMiLCJhdWQiOiJwb3N0Z3Jlc3QtYjRjOGMiLCJhdXRoX3RpbWUiOjE1NzExNTIyMjQsInVzZXJfaWQiOiJNMXZwQ3A2ZjlsaFdCblRleHh1TjlEdXIzUXAyIiwic3ViIjoiTTF2cENwNmY5bGhXQm5UZXh4dU45RHVyM1FwMiIsImlhdCI6MTU3MTE1OTQ0NSwiZXhwIjoxNTcxMTYzMDQ1LCJlbWFpbCI6InNwb25nZWJvYkBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsic3BvbmdlYm9iQGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.nKuovs0Gx_ZKp17dI3kfz6GQofIMEOTA8RqTluwEs-5r-oTbKgpG33uS7fs7txVxvWIb_3fbN3idzfDHZevprMkagbHOd73CxTFBM7pr1bD2OKSK9ZPYfSt9OhvgJL51vBN3voLcNAb5iWVVl2XMqkcXeDoBi8IOKeZr27_DsRx48GSi7HieHWscF1lujSEr2C9tdAek3YyNnr3IcGI8cTSPHPaIbYl-8CaHQO2fUiGHEAaD7sqHxp3otJio56zOoNAy44P_nwORlMFZC0Rm8SaATpbmIkgbGYWHZHty70lmlYGVHTuM_hr2s7z2YhAjuacvBMgusZpyoVnoe3FQeA"

    curl http://localhost:8080/contacts -H "Authorization: Bearer $TOKEN"

Возвращается следующее: {"message":"JWSError JWSInvalidSignature"}

Для секрета JWT я пробовал несколько значений, но, похоже, ни одно из них не работает. Это включает в себя «Ключ API» из проекта firebase, а также попытку «Сгенерировать ключ», который загружает новый файл .json, а внутри есть «private_key»: это строка.


person mike hennessy    schedule 15.10.2019    source источник
comment
Не могли бы вы отредактировать вопрос, включив в него код, который работает не так, как вы ожидаете?   -  person Doug Stevenson    schedule 15.10.2019
comment
обновленный пост с фрагментом кода. Суть в том, что мне нужно предоставить этому API-инструменту секрет JWT, чтобы он мог декодировать токен firebase... и я не знаю, где я могу это получить (или могу ли я)   -  person mike hennessy    schedule 15.10.2019
comment
И какой код вы пишете на бэкенде для проверки токена, который работает не так, как вы ожидаете?   -  person Doug Stevenson    schedule 15.10.2019
comment
Я не пишу код, это приложение для веб-сервера под названием Postgrest. Вот ссылка на простое руководство, в котором показано, как настроить секрет JWT: postgrest. org/en/v6.0/tutorials/tut1.html   -  person mike hennessy    schedule 15.10.2019
comment
Я думаю, что было бы очень полезно знать, что именно делает или ожидает серверная часть.   -  person Doug Stevenson    schedule 15.10.2019
comment
Что ж, я использовал этот простой инструмент для создания токена JWT, и он правильно работает с их сайтом: jwt. io/#отладчик-io . Вы просто вводите секрет JWT, вводите свои требования, и он показывает правильный токен. Затем я настраиваю этот jwt-секрет в их приложении, и он отлично работает. Знаете ли вы, где найти этот секрет JWT в firebase?   -  person mike hennessy    schedule 15.10.2019
comment
Не могли бы вы обновить, какое решение?   -  person chenop    schedule 01.05.2020
comment
Для моего решения для ключа я могу просто указать этот URL-адрес: googleapis.com/service_accounts/v1/jwk/ . Это сработало для меня.   -  person mike hennessy    schedule 04.05.2020


Ответы (1)


Инструкции по использованию сторонней библиотеки для проверки токена идентификатора аутентификации Firebase приведены ниже: nofollow noreferrer">здесь. В нем говорится, что открытый ключ можно найти здесь:

https://www.googleapis.com/robot/v1/metadata/x509/[email protected]

person Doug Stevenson    schedule 15.10.2019
comment
он показывает два сертификата? Какой из них использовать для секрета JWT? Является ли верхний открытый ключ/нижний закрытый? - person mike hennessy; 15.10.2019
comment
Попробуйте их оба и выберите тот, который работает? Если инструкций в документации недостаточно, обратитесь в службу поддержки Firebase, чтобы объяснить, что работает не так, как вы ожидаете. support.google.com/firebase/contact/support - person Doug Stevenson; 15.10.2019
comment
Пробовал оба, все равно не повезло. Спасибо за усилия, я отправил запрос в firebase, чтобы узнать, могут ли они помочь. - person mike hennessy; 15.10.2019
comment
Вы получили решение этого, пожалуйста? - person Toni; 25.12.2019
comment
@mikehennessy что такое билет # и вы получили какое-либо решение? - person bryan-vh; 28.05.2021