我正在尝试使用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令牌?
答案 0 :(得分:2)
有几种方法可以授权GCP用户。本质上,谷歌的首选方式是使用密钥对签署请求,并将其发送给谷歌,以获取应用程序的真实性并授权与上下文相关的JWT。尽管有许多选项说明如何在服务器端执行此操作,但您需要知道这些凭据实际上允许您访问平台本身。本质上,这是oAuth工作流程,您可以从JWT中获得不同的源,它们具有不同的作用域,从而允许您调用与它们相关的端点。
对于邮递员,您遵循文档中提到的简单的oAuth工作流程,该流程很简单Creating client IDs
当然,您需要实现服务器端部分来调用平台API,因为它们不应直接公开,因此,在获取平台令牌的同时,还可以获得额外的安全性来获取签名的请求。
如果您想授权最终用户,这是正确的指南:Authenticating users 同一指南还提供了有关如何授权应用程序的其他“类型”的其他选项。
假设您使用OpenApi规范作为访问RESTFUL API的标准方法。 Google拥有有关使用特定身份验证提供程序使用其服务的大量文档。
Choosing an Authentication Method
每种方法各有利弊,并选择最合适的方法来使用具有适当特权的JWT。
中找到答案 1 :(得分:0)
您可以尝试使用Oauth通过Postman发出HTTP请求进行身份验证。该过程如下:
此link中对此进行了解释。
我认为可以做到。无论哪种方式,如果必须经常执行,我都不认为这是可行的解决方案。