Вы можете довольно легко подписать monkeypatch из AWS SDK в SwaggerJS (и, следовательно, SwaggerUI). См. here
У меня есть слегка модифицированный SwaggerUI here. Учитывая некоторые учетные данные AWS и идентификатор API, он вытащит определение Swagger, отобразит его в SwaggerUI, а затем вы можете вызвать API с помощью sigv4.
Реализация Authorizer выглядит следующим образом:
var AWSSigv4RequestSigner = function(credentialProvider, aws) {
this.name = "sigv4";
this.aws = aws;
this.credentialProvider = credentialProvider;
};
AWSSigv4RequestSigner.prototype.apply = function(options, authorizations) {
var serviceName = "execute-api";
//If we are loading the definition itself, then we need to sign for apigateway.
if (options && options.url.indexOf("apigateway") >= 0) {
serviceName = "apigateway";
}
if(serviceName == "apigateway" || (options.operation && options.operation.authorizations && options.operation.authorizations[0].sigv4))
{
/**
* All of the below is an adapter to get this thing into the right form for the AWS JS SDK Signer
*/
var parts = options.url.split('?');
var host = parts[0].substr(8, parts[0].indexOf("/", 8) - 8);
var path = parts[0].substr(parts[0].indexOf("/", 8));
var querystring = parts[1];
var now = new Date();
if (!options.headers)
{
options.headers = [];
}
options.headers.host = host;
if(serviceName == "apigateway")
{
//For the swagger endpoint, apigateway is strict about content-type
options.headers.accept = "application/json";
}
options.pathname = function() {
return path;
};
options.methodIndex = options.method;
options.search = function() {
return querystring ? querystring : "";
};
options.region = this.aws.config.region || 'us-east-1';
//AWS uses CAPS for method names, but swagger does not.
options.method = options.methodIndex.toUpperCase();
var signer = new this.aws.Signers.V4(options, serviceName);
//Actually add the Authorization header here
signer.addAuthorization(this.credentialProvider, now);
//SwaggerJS/yourbrowser complains if these are still around
delete options.search;
delete options.pathname;
delete options.headers.host;
return true;
}
return false;
};
Мы используем API шлюза, а также Swagger определить API, а также пытались выяснить, как и генерировать SDK JS с помощью чванство-CodeGen (похоже, что консоль API Gateway имеет функцию или настраиваемый шаблон, который включает код sigv4 в шаблонизированном коде), а затем вставлять этот дополнительный соус sigv4 в JS-код sagv4, т. е. на случай переключения ApiClient.js 'applyAuthToRequest' , –
Я полагаю, что инструмент генерации dag-файлов для чаргов работает аналогично кодеку swagger, который позволяет создавать дополнительные (то есть: усы) шаблоны для настройки вывода с разной разметкой, скриптами и т. Д.? –
Предполагая, что один из вариантов был бы вилкой 'swagger-ui' (https://github.com/swagger-api/swagger-ui) и включать в себя ту же магию sigv4? –