如何将 OAuth 与 Swagger Codegen 集成

时间:2020-12-28 08:28:17

标签: java api swagger swagger-codegen

我正在使用 Swagger Generator 网站为 Java 中的 API 生成代码。 API 规范是公开的,可在此处获得。如您所见,JSON 似乎没有任何身份验证配置,但 API 实际上使用 OAuth 身份验证,使用“Microsoft 身份平台”作为权限并使用应用程序 ID 和机密来获取 JWT。我可以使用外部库在 Java 中获取令牌,但我希望尽可能将过程集成到 Swagger 中。

通过将之前的 JSON 导入生成器,显然没有配置 Authorization 并且所有 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());

但由于我缺少经验和文档,这只是即兴创作。 你能帮我吗?

最好的问候, 贾马科

0 个答案:

没有答案