1

我正在制作一个使用谷歌登录的应用程序。我还有一个链接到应用程序的 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)

我还为 python 尝试了 firebase_admin:

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 库本身是否正常工作,我将用户 ID 从应用程序传递到服务器,并尝试使用 firebase_admin 删除用户,我可以做到这一点。但由于某种原因,我无法验证令牌。

谢谢您的帮助。

4

2 回答 2

2

我也面临同样的问题。

案子:

最初:我在 vscode 控制台中打印身份验证令牌并在终端中进行验证。

它给了我错误:令牌长度不能超过 % 4 1。

我尝试验证令牌jwt.io,它似乎是正确的。

问题的实际原因:

vscode 的控制台输出(在我的例子中是 windows 7 和 64 位)。一行限制为1064个字符。

虽然令牌的实际长度应该是1170个字符。

解决方法:

在 vscode 控制台中打印子字符串,并在 python shell 中加入它们以进行验证。

于 2019-08-22T10:14:25.417 回答
1

回答我自己的问题。问题是我的服务器实际上并未部署,因此,当用户登录时,我正在复制打印在 vscode 控制台中的令牌并将其粘贴到 python 代码中并尝试验证令牌。事实证明它不是那样工作的。

我托管了我的 Django 应用程序并在发布请求中传递了令牌,然后尝试验证令牌并且它有效。

如果您遇到困难,可以在此处参考解决方案: https ://coders-blogs.blogspot.com/2018/11/authenticating-user-on-backend-of-your.html

于 2018-11-06T12:23:42.273 回答