У меня есть бэкэнд PHP и клиент Android. С клиентом пользователи могут войти в мое приложение, используя Google или Facebook, оба через Firebase. Я получаю знак от FirebaseUser
и отправить его на мой сервер. Это просто, что первый раздел ( заголовок) содержит алгоритм (который является RS256) и второй ( полезная нагрузка) имеет все данные, связанные с пользователем. Есть третий раздел, который является подписью первых двух, чтобы включить проверку на моем бэкэнде. Проблема в том, что я не знаю, как это сделать. Конкретнее с чем.
я использовал JWT.io проверить мой токен и попытался проверить это без удачи. Поскольку используется алгоритм RS256, проверка должна выполняться с помощью открытого ключа. Но какой открытый ключ? Я пробовал с хранилищем ключей моего приложения, пробовал с помощью сертификатов Google, но он просто повторяет, что он недействителен. Я понимаю что заголовок«s kid
поле — это идентификатор ключа подписи, и я должен его искать, но я не знаю, где.
Документы Firebase тоже не помогают. Есть руководство по Проверка идентификационного токена, но это просто бесполезно, потому что это Java / Node.JS, и он по-прежнему ничего не говорит об открытых ключах.
Итак, вопрос: откуда мне взять открытые ключи?
Итак, я покопался в источнике 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.
Других решений пока нет …