Postman-使用密钥文件的JWT身份验证

Postman-使用密钥文件的JWT身份验证,jwt,postman,google-cloud-endpoints,Jwt,Postman,Google Cloud Endpoints,我正在尝试使用Postman测试在Google云平台上开发的API:API端点后面的应用程序引擎。 我有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

我正在尝试使用Postman测试在Google云平台上开发的API:API端点后面的应用程序引擎。
我有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)
如果我在Postman
OAuth2.0
中设置为身份验证方法,并将获得的JWT粘贴为
访问令牌
,则请求工作正常

我想将整个JWT令牌操作移到Postman中,而不需要事先调用Python代码。我试图使用
从Postman获取新的访问令牌
,但两个选项都不支持JSON密钥文件。

是否可以仅使用Postman从JSON密钥文件中获取JWT令牌?

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

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

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

如果要授权最终用户,请参考以下指南: 同一指南还提供了关于如何授权应用程序的其他“类型”的其他选项

假设您使用OpenApi规范作为访问RESTFUL API的标准方式。 谷歌有大量关于使用特定身份验证提供商使用其服务的文档

每种方法都有其优缺点,并选择最合适的方法,以适当的权限使用JWT


可以在此处找到其他文档

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

  • 自己创建一个JSON Web令牌,其中包括一个头、一个声明 一套,一个签名。(签名需要服务帐户key.json文件中的私钥)
  • 然后从Google OAuth 2.0授权中请求访问令牌 服务器
  • 然后从JSON响应中获取访问令牌,
    授权服务器返回
本文对此进行了解释


我认为这是可以做到的。不管怎样,如果必须经常这样做,我不认为这是一个实用的解决方案。

我希望使用现在设置的身份验证(JSON密钥文件),因为这个设置将在最终解决方案中使用。所以我不想为了邮递员测试而实现其他东西。在这种情况下,您必须复制脚本获得的最终令牌。没有特定的方法来解决它,您也可以尝试为给定客户机的端点创建api密钥以进行测试,这样您就不需要任何令牌,而密钥将用作客户机标识符。虽然它不太安全,但它应该会起作用。