Google Cloud Run文档指出,您可以“将令牌从授权标头中拔出”(docs here)以便对其进行验证并获取有关发出请求的用户的更多信息。
但是,当在处理请求的同时读取Authorization
标头时,似乎令牌的某些部分在通过Google的身份验证前端后已被删除。例如
Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImY2ZjgwZjM3ZjIxYzIz.SIGNATURE_REMOVED_BY_GOOGLE
这是Cloud Run中的错误,还是我们需要做一些不同的事情才能获得完整的Bearer令牌?
答案 0 :(得分:1)
当我检查用户身份时,我只使用令牌的第二部分。这是我的Python代码的摘要。我依靠Google来执行安全性/验证工作,因此,不必担心签名。
# get the JWT token after the Bearer prefix
authorization = request.headers['Authorization'][7:]
# split the token and take only the 2nd part
b64_profile = authorization.split('.')[1]
# decode correctly the B64 token part
profile = base64.b64decode(b64_profile + '=' * (-len(b64_profile) % 4))
# load the JSON and enjoy!
print(json.loads(profile)['email'])
注意:在获得allUsers授权的情况下,电子邮件有时为空
答案 1 :(得分:0)
以下是在Cloud Run中看到的授权标头和SIGNATURE_REMOVED_BY_GOOGLE的详细信息:
allUsers
,则JWS签名将通过并且不会被替换。allUsers
并且OIDC令牌来自Google帐户(gmail),则替换签名。allUsers
并且OIDC令牌来自服务帐户,则不会替换签名。