Google Cloud Run在授权标头中屏蔽Bearer令牌

时间:2019-08-27 08:56:04

标签: google-cloud-platform google-cloud-run

Google Cloud Run文档指出,您可以“将令牌从授权标头中拔出”(docs here)以便对其进行验证并获取有关发出请求的用户的更多信息。

但是,当在处理请求的同时读取Authorization标头时,似乎令牌的某些部分在通过Google的身份验证前端后已被删除。例如

Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImY2ZjgwZjM3ZjIxYzIz.SIGNATURE_REMOVED_BY_GOOGLE

这是Cloud Run中的错误,还是我们需要做一些不同的事情才能获得完整的Bearer令牌?

2 个答案:

答案 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的详细信息:

  1. 如果启用了allUsers,则JWS签名将通过并且不会被替换。
  2. 如果未启用allUsers并且OIDC令牌来自Google帐户(gmail),则替换签名。
  3. 如果未启用allUsers并且OIDC令牌来自服务帐户,则不会替换签名。