【问题标题】:Google Cloud Run masks Bearer token in Authorization headerGoogle Cloud Run 在 Authorization 标头中屏蔽 Bearer 令牌
【发布时间】:2019-12-31 10:04:26
【问题描述】:

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

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

Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImY2ZjgwZjM3ZjIxYzIz.SIGNATURE_REMOVED_BY_GOOGLE

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

【问题讨论】:

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


    【解决方案1】:

    以下是 Cloud Run 中的授权标头和 SIGNATURE_REMOVED_BY_GOOGLE 的详细信息:

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

    [2021 年 3 月 8 日更新]

    Google 编辑身份令牌签名的原因是为了防止身份令牌重复使用。有效的身份令牌将允许该服务使用另一个服务冒充用户/帐户,这存在安全风险。

    【讨论】:

    • 在我的例子中,签名也被替换为服务帐户令牌
    • @Mihir - 我刚刚更新了我的答案以解释为什么 Google 会编辑签名。
    【解决方案2】:

    当我检查用户身份时,我只取令牌的第二部分。这是我的 Python 代码的 sn-p 用于执行此操作。我依靠 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 授权

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2017-11-26
      • 2021-09-30
      • 2020-06-10
      相关资源
      最近更新 更多