邮递员-使用密钥文件进行JWT身份验证

时间:2020-02-17 13:19:30

标签: jwt postman google-cloud-endpoints

我正在尝试使用Postman测试在Google云端平台上开发的API:API终结点后面的App Engine。
我有JSON格式的密钥文件:

{
  "type": "service_account",
  "project_id": "[[my_project_name]]",
  "private_key_id": "[[private_key_id]]",
  "private_key": "-----BEGIN PRIVATE KEY-----\n[[private_key]]\n-----END PRIVATE KEY-----\n",
  "client_email": "[[service_account_email]]",
  "client_id": "",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/[[service_account_email]]"
}

而且我能够使用python代码检索访问令牌:

import time
import google.auth.crypt
import google.auth.jwt

sa_keyfile='[[path_to_the_api_key_file]]'
sa_email='[[service_account_email]]'
audience='[[my_api_url]]'
expiry_length=3600
now = int(time.time())
payload = {
    'iat': now,
    "exp": now + expiry_length,
    'iss': sa_email,
    'aud':  audience,
    'sub': sa_email,
    'email': sa_email
}

signer = google.auth.crypt.RSASigner.from_service_account_file(sa_keyfile)
jwt = google.auth.jwt.encode(signer, payload)

print(jwt)

如果我在邮递员OAuth 2.0中设置身份验证方法,并将获得的JWT粘贴为Access Token,则请求工作正常。

我想将整个JWT令牌操作移到Postman中,而无需事先调用Python代码。我尝试使用Postman的Get New Access Token,但两个选项都不支持JSON密钥文件。
是否可以仅使用Postman从JSON密钥文件中获取JWT令牌?

2 个答案:

答案 0 :(得分:2)

有几种方法可以授权GCP用户。本质上,谷歌的首选方式是使用密钥对签署请求,并将其发送给谷歌,以获取应用程序的真实性并授权与上下文相关的JWT。尽管有许多选项说明如何在服务器端执行此操作,但您需要知道这些凭据实际上允许您访问平台本身。本质上,这是oAuth工作流程,您可以从JWT中获得不同的源,它们具有不同的作用域,从而允许您调用与它们相关的端点。

对于邮递员,您遵循文档中提到的简单的oAuth工作流程,该流程很简单Creating client IDs

当然,您需要实现服务器端部分来调用平台API,因为它们不应直接公开,因此,在获取平台令牌的同时,还可以获得额外的安全性来获取签名的请求。

如果您想授权最终用户,这是正确的指南:Authenticating users 同一指南还提供了有关如何授权应用程序的其他“类型”的其他选项。

假设您使用OpenApi规范作为访问RESTFUL API的标准方法。 Google拥有有关使用特定身份验证提供程序使用其服务的大量文档。

Choosing an Authentication Method

每种方法各有利弊,并选择最合适的方法来使用具有适当特权的JWT。

其他文档可以在Cloud Endpoints documentation

中找到

答案 1 :(得分:0)

您可以尝试使用Oauth通过Postman发出HTTP请求进行身份验证。该过程如下:

  • 自己创建一个JSON Web令牌,其中包括标题,声明 设置和签名。 (签名需要服务帐户key.json文件中的私钥)
  • 然后从Google OAuth 2.0授权请求访问令牌 服务器。
  • 随后从
    的JSON响应中获取访问令牌。 授权服务器返回。

link中对此进行了解释。

我认为可以做到。无论哪种方式,如果必须经常执行,我都不认为这是可行的解决方案。