

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Cache de credenciais no AWS SDK for Java 2.x
<a name="credential-caching"></a>

O AWS SDK for Java 2.x implementa o armazenamento em cache de credenciais para melhorar o desempenho e reduzir as chamadas para fontes de credenciais. Esta seção explica como o armazenamento em cache de credenciais funciona e como você pode configurá-lo para suas aplicações.

## Noções básicas do armazenamento em cache do provedor de credenciais
<a name="understanding-credential-provider-caching"></a>

Os provedores de credenciais no SDK para Java 2.x usam estratégias de armazenamento em cache diferentes:
+ **Armazenamento em cache interno de credenciais**: muitos provedores armazenam em cache as credenciais que eles recuperam.
+ **Atualização automática**: provedores com credenciais em cache implementam mecanismos de atualização.

### Provedores com armazenamento em cache interno de credenciais
<a name="providers-with-internal-caching"></a>

Os seguintes provedores de credenciais armazenam as credenciais em cache internamente, mesmo quando você cria instâncias:
+ **Provedor de credenciais de perfil de instância**: armazena em cache as credenciais do serviço de metadados do Amazon EC2.
+ **Provedor de credenciais de contêiner**: armazena em cache as credenciais do endpoint de metadados do contêiner.
+ **Provedores baseados em STS**: armazene em cache as credenciais temporárias de AWS Security Token Service (STS).
+ **Provedores de tokens de identidade da web**: armazene em cache as credenciais obtidas dos tokens de identidade da web.
+ **Provedor de credenciais de processo**: armazena em cache as credenciais de processos externos.

### Provedores sem armazenamento em cache interno
<a name="providers-without-caching"></a>

Os seguintes provedores não implementam o armazenamento em cache interno:
+ **Provedor de credenciais de variáveis de ambiente**
+ **Provedor de credenciais de propriedade do sistema**
+ **Provedor de credenciais estáticas**

## Configurar o armazenamento em cache de credenciais
<a name="configuring-credential-caching"></a>

É possível personalizar o comportamento do armazenamento em cache ao criar provedores de credenciais:

### Tempo de inatividade
<a name="stale-time"></a>

Controla quando as credenciais são consideradas inativas e precisam ser atualizadas:

```
.staleTime(Duration.ofMinutes(2))  // Consider stale 2 minutes before expiration.
```

### Tempo de pré-obtenção
<a name="prefetch-time"></a>

Determina quando começar a atualizar as credenciais antes que elas expirem:

```
.prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration.
```

### Atualizações assíncronas
<a name="async-updates"></a>

Permite a atualização de credenciais em segundo plano:

```
.asyncCredentialUpdateEnabled(true)  // Refresh credentials in background thread.
```

### Duração da sessão
<a name="session-duration"></a>

Para provedores baseados no STS, controla por quanto tempo as credenciais temporárias permanecem válidas:

```
.refreshRequest(r -> r.durationSeconds(3600))  // 1 hour session.
```

## Exemplo de configuração de credenciais armazenadas em cache
<a name="example-optimized-sts-config"></a>

Como exemplo de configuração do armazenamento em cache para a implementação de um provedor de credenciais, o SDK pode usar uma thread em segundo plano para a pré-obtenção (recuperação com antecedência) das credenciais antes que elas expirem. Dessa forma, você pode evitar a chamada de bloqueio que recupera novas credenciais. 

Veja a seguir um exemplo que cria um `[StsAssumeRoleCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsAssumeRoleCredentialsProvider.html)` que usa uma thread em segundo plano para a pré-obtenção de credenciais definindo a propriedade `[asyncCredentialUpdateEnabled](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#asyncCredentialUpdateEnabled(java.lang.Boolean))` como `true` no compilador:

```
StsAssumeRoleCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder()
    .refreshRequest(r -> r
        .roleArn("arn:aws:iam::111122223333:role/example-role")
        .roleSessionName("example-session")
        .durationSeconds(3600))  // 1 hour session
    .staleTime(Duration.ofMinutes(5))  // Consider stale 5 minutes before expiration
    .prefetchTime(Duration.ofMinutes(10))  // Start refresh 10 minutes before expiration
    .asyncCredentialUpdateEnabled(true)  // Refresh in background
    .build();

S3Client s3 = S3Client.builder()
    .credentialsProvider(provider)
    .build();
```

Quando você invoca uma operação ativada `s3Client` pela primeira vez, uma `[AssumeRoleRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/model/AssumeRoleRequest.html)` é enviada para o AWS Security Token Service (STS). O STS retorna credenciais temporárias válidas por 15 minutos (900 segundos). A instância `s3Client` usa as credenciais armazenadas em cache até a hora de atualizá-las antes de decorridos os 15 minutos. Por padrão, o SDK tenta recuperar novas credenciais para uma nova sessão entre cinco minutos e um minuto antes do prazo de expiração da sessão atual. A janela de pré-obtenção pode ser configurada usando as propriedades `[prefetchTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#prefetchTime(java.time.Duration))` e `[staleTime](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sts/auth/StsCredentialsProvider.BaseBuilder.html#staleTime(java.time.Duration))`.

É possível configurar os seguintes provedores de credenciais baseados em sessão da mesma forma:
+ `StsWebIdentityTokenFileCredentialsProvider`
+ `StsGetSessionTokenCredentialsProvider`
+ `StsGetFederationTokenCredentialsProvider`
+ `StsAssumeRoleWithWebIdentityCredentialsProvider`
+ `StsAssumeRoleWithSamlCredentialsProvider`
+ `StsAssumeRoleCredentialsProvider`
+ `DefaultCredentialsProvider` (quando delega ao provedor de credenciais que usa sessões)
+ `ProcessCredentialsProvider`
+ `WebIdentityTokenFileCredentialsProvider`
+ `ContainerCredentialsProvider`
+ `InstanceProfileCredentialsProvider`

Compreender o cache de credenciais ajuda você a otimizar o desempenho e a confiabilidade do seu aplicativo ao trabalhar com. Serviços da AWS