#java #api #swagger #swagger-codegen
#java #API #swagger #swagger-codegen
Вопрос:
Я использую веб-сайт Swagger Generator для генерации кода для API на Java. Спецификации API являются общедоступными и доступны здесь . Как вы можете видеть, похоже, что в JSON нет никакой конфигурации аутентификации, но API фактически использует аутентификацию OAuth с использованием «Microsoft Identity Platform» в качестве полномочий и использует идентификатор приложения и секрет для получения 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 и правильна ли это процедура. Я что-то упустил? Я делаю что-то не так? Я не знаю правильного способа обработки вызовов аутентификации и API в Java после генерации кода. Прямо сейчас я делаю так:
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());
Но поскольку мне не хватает опыта и документации, это просто импровизация.
Можете ли вы мне помочь?
С наилучшими пожеланиями, Джаммарко
Комментарии:
1. Генератор OpenAPI (ответвление сообщества Swagger Codegen), похоже, имеет лучшую поддержку OAuth в клиенте Java (jersey2). Возможно, вы захотите попробовать, чтобы убедиться, что он лучше соответствует вашим требованиям.