Проверка токена в Firebase

У меня есть бэкэнд PHP и клиент Android. С клиентом пользователи могут войти в мое приложение, используя Google или Facebook, оба через Firebase. Я получаю знак от FirebaseUser и отправить его на мой сервер. Это просто, что первый раздел ( заголовок) содержит алгоритм (который является RS256) и второй ( полезная нагрузка) имеет все данные, связанные с пользователем. Есть третий раздел, который является подписью первых двух, чтобы включить проверку на моем бэкэнде. Проблема в том, что я не знаю, как это сделать. Конкретнее с чем.

я использовал JWT.io проверить мой токен и попытался проверить это без удачи. Поскольку используется алгоритм RS256, проверка должна выполняться с помощью открытого ключа. Но какой открытый ключ? Я пробовал с хранилищем ключей моего приложения, пробовал с помощью сертификатов Google, но он просто повторяет, что он недействителен. Я понимаю что заголовок«s kid поле — это идентификатор ключа подписи, и я должен его искать, но я не знаю, где.

Документы Firebase тоже не помогают. Есть руководство по Проверка идентификационного токена, но это просто бесполезно, потому что это Java / Node.JS, и он по-прежнему ничего не говорит об открытых ключах.

Итак, вопрос: откуда мне взять открытые ключи?

3

Решение

Итак, я покопался в источнике Firebase Server SDK и нашел расположение открытых ключей:
https://www.googleapis.com/robot/v1/metadata/x509/[email protected]

Не знаю, почему они просто не могли разместить это на своем сайте …

В любом случае, я не уверен, но я предполагаю, что эти ключи меняются ежедневно (так же, как и ключи OAuth2), поэтому вы должны время от времени проверять и повторно кэшировать их на своем сервере.

Кроме того, вы должны проверить следующие значения:

  • alg == "RS256"
  • iss: https://securetoken.google.com/<firebaseProjectID>
  • aud: <firebaseProjectID>
  • sub непусто

Нашел их на этот похожий вопрос (просто прокрутите до конца ответа), который был найден путем поиска этого конкретного googleapis.com URL.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]