È possibile eseguire facilmente la registrazione monkeypatch dall'SDK AWS in SwaggerJS (e quindi SwaggerUI). Vedi here
Ho un SwaggerUI leggermente modificato here. Con alcune credenziali AWS e un ID API, verrà abbassata la definizione Swagger, visualizzata in SwaggerUI e quindi sarà possibile chiamare l'API utilizzando sigv4.
L'implementazione Authorizer assomiglia a questo:
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;
};
Stiamo usando gateway API così come Swagger per definire le API e sono stati anche cercando di capire come sia generare l'SDK JS con spavalderia-Codegen (sembra che la console Gateway dell'API abbia una funzionalità o un modello personalizzato che include il codice sigv4 nel codice dei modelli) e quindi incorpora quella salsa sigv4 extra nel codice JS di swagger doc, cioè: nel caso di switch "AAAClient.js'" applyAuthToRequest' . –
Suppongo che lo strumento swagger per la generazione di documenti funzioni in modo simile a swegger codegen che abilita modelli aggiuntivi (ad esempio: baffi) per personalizzare l'output con markup, script e così via diversi? –
indovinare un'opzione potrebbe essere la forchetta 'swagger-ui' (https://github.com/swagger-api/swagger-ui) e includere la stessa magia sigv4 lì? –