2016-06-04 2 views
3

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

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

Документы Firebase также не помогают. Существует руководство о ID token verification, но это просто бесполезно, потому что это Java/Node.JS, и он все еще ничего не говорит о открытых ключах.

Вопрос в следующем: Где я могу получить открытые ключи?

ответ

2

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

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

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

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

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

Найдено на this similar question (только прокрутите в нижней части ответа), который был найден путем поиска этого конкретного googleapis.com URL.

+0

Вы можете объяснить, пожалуйста, как передать открытые ключи для декодирования функции в PHP? См. Мой вопрос здесь: http://stackoverflow.com/questions/42098150/how-to-verify-firebase-id-token-with-phpjwt – eren130

Смежные вопросы