APIゲートウェイエンドポイントがいくつかあります。各エンドポイントはカスタムオーソライザ(CA)で保護されています。このCAはHTTPコールを検査し、Authorization
ヘッダーの存在を確認します。このヘッダーには、OpenId Connectトークン(単純なJWTトークン)が含まれている必要があります。そのため、CAはそのヘッダーを検査し、いくつかのチェックと検証を行うことができます。AWS Android SDKを使用してJWTトークンを送信
Postmanを使用してエンドポイントを呼び出すと、正しいヘッダーを設定できるため、問題なく動作します。
生成されたAndroid SDKを使用して同じ呼び出しを行うと、問題が発生し始めます。呼び出しを行うたびにAWS4の署名がヘッダーとして送信されるためです。私たちはJWTでAuthorization
ヘッダーを送る方法を理解することができます。
我々はApiClientFactoryクラスを拡張し、明示的な方法でヘッダを追加することにより、必要なものを取得:
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;
}
};
}
}
それが動作する場合であっても、それはこの問題を回避するように私に聞こえます。この問題に直面する際のベストプラクティスはいくつかありますか?