java—如何将oauth与swagger codegen集成

dm7nw8vv  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(306)

我正在使用swagger生成器网站为java中的api生成代码。api规范是公开的,可以在这里找到。如您所见,json似乎没有任何身份验证配置,但api实际上使用oauth身份验证,使用“microsoft identity platform”作为授权,并使用应用程序id和secret来获取jwt。我可以使用外部库在java中获取令牌,但是我希望尽可能地将这个过程集成到swagger中。
通过将前面的json导入到生成器中,显然没有配置任何授权,所有api调用都会失败。我修改了json并添加了以下参数:

  1. "securityDefinition":{
  2. "civnext_oauth":{
  3. "type":"oauth2",
  4. "authorizationUrl":"https://login.microsoftonline.com/............./oauth2/token",
  5. "flow":"application",
  6. "scopes":{
  7. "write:protocollo":"Modify Protocolli",
  8. "read:protocollo":"Read Protocolli"
  9. }
  10. }
  11. },

然后,对于我添加的每一条路径

  1. "security":{
  2. "civnext_oauth":[
  3. "write:protocollo",
  4. "read:protocollo"
  5. ]
  6. },

我生成了所有的文件并将它们正确地导入到我的项目中,但仍然无法测试经过身份验证的api调用。特别地:
我不知道我在json中的更改是否正确,是否是正确的过程。我错过什么了吗?我做错什么了吗?我不知道在生成代码之后用java处理身份验证和api调用的正确方法。现在我是这样做的:

  1. String authority = "https://login.microsoftonline.com/............./oauth2/token";
  2. ExecutorService service = Executors.newFixedThreadPool(1);
  3. AuthenticationContext context = new AuthenticationContext(authority, true, service);
  4. Future<AuthenticationResult> future = context.acquireToken(
  5. "api_resource_path",
  6. new ClientCredential(
  7. "app_id",
  8. "secret"),
  9. null);
  10. AuthenticationResult result = future.get();
  11. OAuth authentication = new OAuth();
  12. authentication.setAccessToken(result.getAccessToken());
  13. ApiClient apiClient = new ApiClient();
  14. apiClient.getAuthentications().put("oauth2", authentication);
  15. apiClient.setBasePath("basepath");
  16. apiClient.setAccessToken(result.getAccessToken());
  17. ProtocolloApi api = new ProtocolloApi();
  18. api.setApiClient(apiClient);
  19. Call call = api.protocolloGetTipoPostaCall("1.0", null, null);
  20. Response response = call.execute();
  21. System.out.println(response.toString());

但由于我缺少经验和文件,这只是即兴创作。你能帮助我吗?
致以最诚挚的问候,吉亚马科

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题