GCP发布/订阅身份验证令牌未出现在请求中

时间:2019-10-10 22:31:53

标签: google-cloud-platform google-cloud-pubsub

我正在设置云发布/订阅服务,以通过遵循developer documentation在后端接收推送订阅消息。

由于某些原因,发送到我的后端的推送订阅请求永远不会包含“令牌”查询参数,因此我的后端无法验证推送请求是否来自我的应用程序。开发人员文档中的以下代码用于实现验证目的:

<time>

根据该文档,我已经验证了“服务帐户令牌创建者”权限已授予发布/订阅者的签名服务,并启用了“推送端点身份验证”选项,并为“受众群体(可选)”字段在我的发布/订阅的推送订阅中。

我想知道我是否仍然在这里遗漏了一些东西,还是我误认为了令牌受众的工作方式?为什么后端收到的请求中没有出现“令牌”值?任何输入将不胜感激!

2 个答案:

答案 0 :(得分:0)

正如约翰·汉利(John Hanley)所说,令牌位于标头中。但是,当我查看您的代码时,我不知道您想“比较”什么。提供的令牌经常更改(因为其寿命很短),因此您无法将其与参考令牌进行比较

但是,您可以从令牌中提取索赔信息,然后对其进行验证。这是我用来提取电子邮件的Python代码段。

    authorization = request.headers['Authorization'][7:]
    b64_profile = authorization.split('.')[1]
    profile = base64.b64decode(b64_profile + '=' * (-len(b64_profile) % 4))
    print(json.loads(profile)['email'])

答案 1 :(得分:0)

此处引用的code snippet用于验证应用程序令牌。应用程序开发人员将此令牌定义为appengine-web.xmlline 7)中的环境变量。

正确验证推送请求来源的令牌是一个不同的令牌。它由Cloud Pub / Sub生成,并以JWT的形式出现在推送请求的授权标头中。这段代码显示了如何验证JWT(您也可以检出full sample):

      // Verify and decode the JWT.
      GoogleIdToken idToken = verifier.verify(authorization);

希望这有助于消除混乱。 :-)