Невозможно проверить токен Firebase

Я делаю приложение во флаттере, которое использует вход в Google. У меня также есть бэкэнд Django, связанный с приложением, и я хочу проверить пользователя в бэкэнде Django. Я нашел много решений в Интернете, но ни одно не работает. Наверное, я где-то напутал.

Я попытался использовать Python-Jose для проверки, и вот код:

from jose import jwt
import urllib.request, json
token = '<token recieved using await user.getIdToken in flutter>'
target_audience = "<tried projectid/appid>"
certificate_url = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'
response = urllib.request.urlopen(certificate_url)
certs = response.read()
certs = json.loads(certs)
print(certs)
user = jwt.decode(token, certs, algorithms='RS256', 
audience=target_audience)

Я также попробовал oauth2client, код здесь:

from oauth2client import crypt
import urllib.request, json
certificate_url = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'
target_audience = 'tried projectid/appid'
response = urllib.request.urlopen(certificate_url)
certs = response.read()
certs = json.loads(certs)
print(certs)
crypt.MAX_TOKEN_LIFETIME_SECS = 30 * 86400
idtoken = 'token received from await user.getIdToken()'
crypt.verify_signed_jwt_with_certs(idtoken, certs, target_audience)

Я также попробовал firebase_admin для python:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import auth
cred = credentials.Certificate('<firebase service accounts private key>')
default_app = firebase_admin.initialize_app(cred)
token = 'token from flutter'
verifyied =auth.verify_id_token(id_token=token)

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

Спасибо за помощь.

1 ответ

Я также столкнулся с той же проблемой.

Случай:

Первоначально: я печатал токен авторизации в консоли vscode и проверял в терминале.

Это дало мне ошибку: длина токена не может быть на 1 больше, чем% 4.

Я попытался проверить токен от jwt.io и это было на первый взгляд правильно.

Фактическая причина проблемы:

Консольный вывод vscode (в моем случае windows 7 и 64 bit). Ограничено 1064 символами для строки.

Хотя реальная длина токена должна быть 1170 символов.

Обходное решение:

Напечатайте подстроку в консоли vscode и соедините их в оболочке python для проверки.

Отвечая на мой собственный вопрос. Проблема заключалась в том, что мой сервер фактически не был развернут, поэтому я копировал токен, напечатанный в консоли vscode, когда пользователь входит в систему и вставлял его в код python, и пытался проверить токен. Оказывается, это не работает таким образом.

Я разместил свое приложение на Django и передал токен в запросе после публикации, а затем попытался проверить токен, и он заработал.

Вы можете обратиться к решениям здесь, если вы застряли: https://coders-blogs.blogspot.com/2018/11/authenticating-user-on-backend-of-your.html

Другие вопросы по тегам