如何使用 ReadyAPI 3.6.0 自动生成 JWT

问题描述

我有一个使用 JWT 进行授权的 Spring Boot 应用程序。我对 OAuth 和 JWT 有基本的了解,但是这个应用程序使用了更多我目前不熟悉的东西。因此,为了生成要在此应用程序中使用的 JWT,我们执行类似于此的命令:

java -jar jwt-bearer-token-acquirer-1.0.18.jar 
--legacyVerifierKeyEndpoint https://example.com/oauth/token_key 
--tokenEndpoint https://example.com/oauth/token
--issuer ABC123
--subject ABC123
--scope /myapp/myscope
--privateKeySignerFile C:\mykeyfile.jks
--jksKeyAlias ABC123
--jksKeyStorePassword myPassword
--jksKeyPassword myOtherPassword

使用此命令获得 JWT 后,我们可以进行 API 调用并返回预期结果。

所以现在,我被要求了解如何使用 ReadyAPI 自动生成 JWT,以便我们的验证器可以运行测试而无需手动生成令牌。在这里https://support.smartbear.com/readyapi/docs/requests/auth/types/oauth2/generate-jwt.html?sbsearch=auto%20generate%20token阅读了很多关于他们的文档后,我仍然无法理解该怎么做。

我能够添加密钥存储信息,但我不确定在哪里或如何告诉 ReadyAPI 生成完整的 JWT,因为我不知道将验证器密钥端点或令牌端点之类的东西放在哪里。

我将不胜感激任何帮助。

先谢谢大家。

解决方法

你说:

...这个应用程序使用了更多我目前不熟悉的东西。

因此您可能无法使用默认的 ReadyAPI 机制来生成 JWT。

  1. 启动一个测试用例,然后打开 Setup tab
  2. 在设置中,您可以使用 const startingPointId = 395; const allNodes = { "818": { "id": "818","content": { "html": "<p>1</p>" },"outgoingNodes": [ "819" ],"tableItemId": 395 },"821": { "id": "821","content": { "html": "<p>4</p>" },"tableItemId": 396 } } const tableItems = { "395": { "id": "395","name": "SP1","code": "SP1" },"396": { "id": "396","name": "SP2","code": "SP2" } } const allOutgoingNodes = R.pipe( R.values,R.pluck('outgoingNodes'),R.flatten )(tableItemNodes); const result = R.pipe( R.pick(allOutgoingNodes),R.reject(R.propEq('tableItemId',startingPointId)),R.map( R.compose( R.assoc('externalStartingPoint',true),SomeMagicFunction(node.tableItemId),R.over( R.lensPath(['content','html']),R.concat(R.__,'<!-- Table item name should display here -->') ) ) ),)(allNodes); 之类的东西来运行您的命令。有关其他信息,请参阅此 SO Q&A。如果您能让您的开发人员向您展示如何从 Java/Groovy 调用您的 jwt-bearer-token-acquirer-1.0.18.jar,这将简化此过程。
  3. 在脚本中,将 JWT 令牌存储在类似 "command".execute() 的地方。并将令牌存储在测试用例属性中:def token = "command".execute()
  4. 开始向您的测试用例添加 REST 调用。对于您进行的每个 REST 调用,您都必须 Add custom headers: testCase.setPropertyValue('token',token) 的值为 Authorization。如果您愿意,可以使用 custom Events 简化此操作。