java—如何将oauth与swagger codegen集成

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

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

"securityDefinition":{
      "civnext_oauth":{
         "type":"oauth2",
         "authorizationUrl":"https://login.microsoftonline.com/............./oauth2/token",
         "flow":"application",
         "scopes":{
            "write:protocollo":"Modify Protocolli",
            "read:protocollo":"Read Protocolli"
         }
      }
   },

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

"security":{
           "civnext_oauth":[
              "write:protocollo",
              "read:protocollo"
           ]
        },

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

String authority = "https://login.microsoftonline.com/............./oauth2/token";
ExecutorService service = Executors.newFixedThreadPool(1);
AuthenticationContext context = new AuthenticationContext(authority, true, service);

Future<AuthenticationResult> future = context.acquireToken(
  "api_resource_path", 
  new ClientCredential(
    "app_id", 
    "secret"), 
  null);

AuthenticationResult result = future.get(); 

OAuth authentication = new OAuth();
authentication.setAccessToken(result.getAccessToken());

ApiClient apiClient = new ApiClient();      
apiClient.getAuthentications().put("oauth2", authentication);
apiClient.setBasePath("basepath");
apiClient.setAccessToken(result.getAccessToken());

ProtocolloApi api = new ProtocolloApi();
api.setApiClient(apiClient);
Call call = api.protocolloGetTipoPostaCall("1.0", null, null);
Response response = call.execute();
System.out.println(response.toString());

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

暂无答案!

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

相关问题