Django 无法验证Firebase令牌
我正在制作一个应用程序在颤栗使用谷歌登录。我还有一个Django后端链接到应用程序,我想验证Django后端中的用户。我在互联网上找到了很多解决方案,但没有一个有效。也许我在什么地方搞砸了 我尝试使用python jose进行验证,代码如下:Django 无法验证Firebase令牌,django,flutter,firebase-admin,oauth2client,python-jose,Django,Flutter,Firebase Admin,Oauth2client,Python Jose,我正在制作一个应用程序在颤栗使用谷歌登录。我还有一个Django后端链接到应用程序,我想验证Django后端中的用户。我在互联网上找到了很多解决方案,但没有一个有效。也许我在什么地方搞砸了 我尝试使用python jose进行验证,代码如下: from jose import jwt import urllib.request, json token = '<token recieved using await user.getIdToken in flutter>' target_
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)
我还尝试了firebase_admin for 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\u管理
从firebase_管理员导入凭据
从firebase_管理导入验证
cred=凭证。证书(“”)
默认应用程序=firebase应用程序管理。初始化应用程序(cred)
token='来自Flatter的token'
verifyied=auth.verify\u id\u token(id\u token=token)
为了检查firebase_admin库本身是否正常工作,我将用户ID从应用程序传递到服务器,并尝试使用firebase_admin删除用户,我可以做到这一点。但由于某种原因,我无法验证令牌
谢谢你的帮助。回答我自己的问题。问题是我的服务器没有实际部署,因此,当用户登录并将其粘贴到python代码中并尝试验证令牌时,我正在复制vscode控制台中打印的令牌。结果它不是那样工作的 我托管了我的Django应用程序,并在post请求中传递了令牌,然后尝试验证令牌,它成功了 如果遇到问题,您可以在此处参考解决方案:
我也面临同样的问题 案例: 最初:我在vscode控制台中打印身份验证令牌,并在终端中进行验证 它给了我一个错误:令牌长度不能超过%4 我尝试从
jwt.io
验证令牌,它似乎是正确的
问题的实际原因:
vscode的控制台输出(在我的例子中是windows 7和64位)。一行限制为1064个字符
虽然令牌的实际长度应该是1170个字符
解决方案:
在vscode控制台中打印子字符串,并在python shell中加入它们以进行验证。在看到您的答案之前,我几乎花了2个小时手动验证Firebase ID令牌,但没有成功。因此,Android Logcat对消息也有类似的字符限制。当我试着把它分成两部分,把它们放在单独的日志消息中,加入它们时,我绝望的尝试终于成功了。
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)