簡體   English   中英

使用 Apache HttpComponents 客戶端簽署 AWS HTTP 請求

[英]Signing AWS HTTP requests with Apache HttpComponents Client

我正在嘗試向受 IAM 訪問策略保護的AWS Elasticsearch域發出 HTTP 請求。 我需要簽署這些請求,以便它們獲得 AWS 的授權。 我正在使用Jest ,而后者又使用Apache HttpComponents Client

這似乎是一個常見的用例,但我找不到我應該怎么做才能讓 Jest 簽署所有請求。

我想我找到了! :)

這個項目似乎完全符合我的要求: aws-signing-request-interceptor ,描述為“用於簽署 AWS 請求的 Apache 客戶端的請求攔截器。最初創建是為了使用 Jest 客戶端支持 AWS 的 Elasticsearch 服務。” .

編輯:我 分叉了該項目以滿足我的需求(Java 7,臨時 STS 憑據),並且它運行良好。

下面是一個使用示例(這里沒有 STS 臨時憑證):

String region = "us-east-1";
String service = "es";
String url = "???"; // put the AWS ElasticSearch endpoint here

DefaultAWSCredentialsProviderChain awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();
final AWSSigner awsSigner = new AWSSigner(awsCredentialsProvider, region, service, () -> new LocalDateTime(DateTimeZone.UTC));

JestClientFactory factory = new JestClientFactory() {
    @Override
    protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) {
        builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
        return builder;
    }
};
factory.setHttpClientConfig(new HttpClientConfig.Builder(url)
        .multiThreaded(true)
        .build());
JestClient client = factory.getObject();

這在異步請求的情況下不起作用。

更新:

忽略我之前的評論。 它也可以在為異步請求添加攔截器后工作:

final AWSSigningRequestInterceptor requestInterceptor = new AWSSigningRequestInterceptor(awsSigner);
            factory = new JestClientFactory() {
                @Override
                protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) {
                    builder.addInterceptorLast(requestInterceptor);
                    return builder;
                }
                @Override
                protected HttpAsyncClientBuilder configureHttpClient(HttpAsyncClientBuilder builder) {
                    builder.addInterceptorLast(requestInterceptor);
                    return builder;
                }
            };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM