2017-11-14 21 views
0

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; 
      } 
     }; 
    } 
} 

それが動作する場合であっても、それはこの問題を回避するように私に聞こえます。この問題に直面する際のベストプラクティスはいくつかありますか?

答えて

0

APIゲートウェイでは、メソッドリクエストにHTTPリクエストヘッダーを追加するだけでリクエストを定義でき、生成されたSDKにはヘッダーを指定するフィールドがあります。

コンソール: console view that allows adding header

生成されたAndroidのSDK:

@com.amazonaws.mobileconnectors.apigateway.annotation.Operation(path = "/companies", method = "GET") 
CompanyList companiesGet(
     @com.amazonaws.mobileconnectors.apigateway.annotation.Parameter(name = "x-vendor-authorization", location = "header") 
     String xVendorAuthorization, 
     @com.amazonaws.mobileconnectors.apigateway.annotation.Parameter(name = "continuationToken", location = "query") 
     String continuationToken, 
     @com.amazonaws.mobileconnectors.apigateway.annotation.Parameter(name = "pageSize", location = "query") 
     String pageSize, 
     @com.amazonaws.mobileconnectors.apigateway.annotation.Parameter(name = "properties", location = "query") 
     String properties); 

SDKコール:

client.companiesGet("abc123AuthToken", "continueToken1", "20", "prop1"); 
関連する問題