Wir haben einige API-Gateway-Endpunkte. Jeder Endpunkt ist mit einem Custom Authorizer (CA) geschützt. Diese CA prüft den HTTP-Aufruf und verifiziert das Vorhandensein des Headers Authorization
. Dieser Header muss ein OpenId Connect-Token (ein einfaches JWT-Token) enthalten, damit die CA sie prüfen und einige Überprüfungen und Validierungen vornehmen kann.Senden des JWT-Tokens mit AWS Android SDK
Wenn wir Postman verwenden, um den Endpunkt aufzurufen, funktioniert es ohne ein Problem, da wir die richtigen Header einrichten können.
Die Probleme beginnen zu erhöhen, wenn wir das generierte Android SDK verwenden, um den gleichen Aufruf auszuführen, da jeder Versuch, den Aufruf auszuführen, eine AWS4-Signatur als Header sendet. Wir können herausfinden, wie man Authorization
Header mit JWT sendet.
Wir bekommen, was wir brauchen, um ApiClientFactory-Klasse erweitern und das Hinzufügen der Header in einer expliziten Weise:
public class CustomApiClientFactory extends ApiClientFactory {
private String LOGIN_NAME = "a.provider.com";
private AWSCredentialsProvider provider;
@Override
public ApiClientFactory credentialsProvider(AWSCredentialsProvider provider) {
this.provider = provider;
return super.credentialsProvider(provider);
}
@Override
ApiClientHandler getHandler(String endpoint, String apiName) {
final Signer signer = provider == null ? null : getSigner(getRegion(endpoint));
// Ensure we always pass a configuration to the handler
final ClientConfiguration configuration = new ClientConfiguration();
return new ApiClientHandler(endpoint, apiName, signer, provider, null, configuration) {
@Override
Request<?> buildRequest(Method method, Object[] args) {
Request<?> request = super.buildRequest(method, args);
request.addHeader("Authorization", "Bearer " + ((CognitoCachingCredentialsProvider) provider).getLogins().get(LOGIN_NAME));
return request;
}
};
}
}
Auch wenn es funktioniert, ist es wie eine Abhilfe klingt für mich. Es gibt einige bekannte Best Practices im Umgang mit diesem Problem?