在Postman Pre-request脚本中生成RSA JWT

qq24tv8q  于 2024-01-07  发布在  Postman
关注(0)|答案(2)|浏览(355)

我有下面的预请求脚本,我正在使用它来尝试为Google API生成JWT- Google使用RS 256加密,这是我认为我卡住的地方-CryptoJS似乎只支持HmacSHA 256-任何建议都将是有帮助的:
以下是Postman的预请求脚本:

  1. function base64url(source) {
  2. // Encode in classical base64
  3. encodedSource = CryptoJS.enc.Base64.stringify(source);
  4. // Remove padding equal characters
  5. encodedSource = encodedSource.replace(/=+$/, '');
  6. // Replace characters according to base64url specifications
  7. encodedSource = encodedSource.replace(/\+/g, '-');
  8. encodedSource = encodedSource.replace(/\//g, '_');
  9. return encodedSource;
  10. }
  11. function addIAT(request) {
  12. var iat = Math.floor(Date.now() / 1000) - 100;
  13. data.iat = iat;
  14. return data;
  15. }
  16. function addEXP(request) {
  17. var exp = Math.floor(Date.now() / 1000) + 3300;
  18. data.exp = exp;
  19. return data;
  20. }
  21. var header = {
  22. "alg": "RS256",
  23. "typ": "JWT",
  24. "kid": "xxx"
  25. };
  26. var data = {
  27. "iss": "[email protected]",
  28. "aud": "https://oauth2.googleapis.com/token",
  29. "scope": "https://www.googleapis.com/auth/cloud-platform"
  30. };
  31. data = addIAT(data);
  32. data = addEXP(data);
  33. var privateKEY = "-----BEGIN PRIVATE KEY-----xxxxxxxxxxxxxxxLcGGNkna2Y3URoT0vDNneqzaasmJk4JZ97BcFLOulTihA49z8zmQKBgQDKX9AWS88cnfyiXSxtRNUFYvN4SzMDTJ1o59Gm6Sk77t7Ylfm+8PKA00SQeN7FuU/cbU4PkbAyzcp7eAGE3KXoLC/pWQ14srWGAsQkti1PmBo400ajRQReJPs3XxIl3yl4swlRgn+w9x6xy3CRnWrZRQSxRrtdDkBJcp7Lml+4mwKBgQCCeiTsktlMTOy9LqxOUMh6Lt7Z5jceNSwusW8Z4YVsewiSsRezufLBRcTywifgPOyUTP3S7etEfW2CKF0smpM0drfxd/3Ic7oKr7ESY5zwNcV7Q3NUGxaqGy8yoxEhKkLsYkOzYUdyNyfJd5Sh8yq7ICrX7/UGkVLOi44VrdaluQKBgC3kmH3V5zvoH/h6BK8q4tv72pa3BvSClVfK6mJdkbpDq0mWiTJh1bydLHlOz8YrBg9IwmEJetmqjXZ+emm01/LUwnC6fzGV5VBkpDJnFdNs/NVSJDy2VA09ebLO3oC0IOV8RGq1m1t4Tv+m0PpUpnxrCGtjTO4HY1DEq3okofxtAoGABjq4QegVIlImU5LSAEKgnUiwA1CHGW3+ZzfCczAv2VRfk/DSlYLmsxLRIfjsCVEo79NiVGyIsKmt5TJRxVLXp++ydKCEN/YRrjqEFgHNoH0rDCuV/IKAeN17/TYKphuebSX6mVsfo7GXI1kSoGJkDDnPKR4peiIF/YC9BTqQgIs=-----END PRIVATE KEY-----"
  34. var secret = 'myjwtsecret';
  35. // encode header
  36. var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header));
  37. var encodedHeader = base64url(stringifiedHeader);
  38. // encode data
  39. var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(data));
  40. var encodedData = base64url(stringifiedData);
  41. //encode privatekey
  42. //var stringifiedPrivatekey = CryptoJS.enc.Utf8.parse(JSON.stringify(privateKEY));
  43. //var encodedPrivatekey = base64url(stringifiedPrivatekey);
  44. // build token
  45. var token = encodedHeader + "." + encodedData
  46. // sign token
  47. //var signature = CryptoJS.HmacSHA256(token, secret);
  48. //signature = base64url(signature);
  49. var signature = CryptoJS.RS256(token , privateKEY);
  50. signedToken = base64url(signature);
  51. var jwt = token + "." + signedToken
  52. postman.setEnvironmentVariable("payload", jwt);

字符串

xfb7svmp

xfb7svmp1#

我已经在我项目中发现这个问题好几次了,所以我决定创建一个简单的方法来解决这个问题,在这里我已经发布了一个“库”来轻松地执行加密操作,比如在postman的“预请求”和“测试”脚本中生成jwt、PKCE挑战......,如果你有任何疑问,请看一看并联系我。
致以最诚挚的问候。

d6kp6zgx

d6kp6zgx2#

您可以在您的收藏中的授权选项卡下选择:

** JWT **:Bearer
算法:RS 256
私钥:{{SECRET_KEY}}(直接加载您的文件或设置为集合变量)
Payload:{{PAYLOAD}}(在预请求脚本中设置)

然后在您的Pre-request Script页签中:

  1. // Load your api key
  2. const apiKey = pm.collectionVariables.get('API_KEY')
  3. // Common payload params, create the ones you need
  4. const uri = pm.request.url.getPathWithQuery()
  5. const sub = apiKey
  6. const iat = Math.floor(Date.now() / 1000)
  7. const exp = iat + 20
  8. const payload = {
  9. uri,
  10. iat,
  11. exp,
  12. sub,
  13. }
  14. // Set your payload, don't forget to stringify it
  15. pm.collectionVariables.set("PAYLOAD",JSON.stringify(payload))

字符串
您可以将相同的逻辑应用于JWT Headers

展开查看全部

相关问题