

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á.

# Solicitações pré-assinadas
<a name="presign-requests"></a>

Você pode pré-assinar solicitações para algumas operações de AWS API para que outro chamador possa usar a solicitação posteriormente sem apresentar suas próprias credenciais. 

Por exemplo, suponha que Alice tenha acesso a um objeto do Amazon Simple Storage Service (Amazon S3) e queira compartilhar temporariamente o acesso ao objeto com Bob. Alice pode gerar uma `GetObject` solicitação pré-assinada para compartilhar com Bob para que ele possa baixar o objeto sem precisar acessar as credenciais de Alice.

## Conceitos básicos de pré-assinatura
<a name="presign-requests-basics"></a>

O SDK para Kotlin fornece métodos de extensão em clientes de serviço para pré-assinar solicitações. Todas as solicitações pré-assinadas exigem uma duração que represente por quanto tempo a solicitação assinada é válida. Após o término da duração, a solicitação pré-assinada expira e gera um erro de autenticação se executada.

O código a seguir mostra um exemplo que cria uma `GetObject` solicitação pré-assinada para o Amazon S3. A solicitação é válida por 24 horas após a criação.

```
val s3 = S3Client.fromEnvironment()

val unsignedRequest = GetObjectRequest {
    bucket = "foo"
    key = "bar"
}

val presignedRequest = s3.presignGetObject(unsignedRequest, 24.hours)
```

O método [https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.presigners/presign-get-object.html](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.presigners/presign-get-object.html)de extensão retorna um [https://docs.aws.amazon.com/smithy-kotlin/api/latest/http/aws.smithy.kotlin.runtime.http.request/-http-request/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http/aws.smithy.kotlin.runtime.http.request/-http-request/index.html)objeto. O objeto de solicitação contém o URL pré-assinado em que a operação pode ser invocada. Outro chamador pode usar a URL (ou a solicitação inteira) em uma base de código ou ambiente de linguagem de programação diferente.

Depois de criar a solicitação pré-assinada, use um cliente HTTP para invocar uma solicitação. A API para invocar uma solicitação HTTP GET depende do cliente HTTP. O exemplo a seguir usa o método Kotlin [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.net.-u-r-l/read-text.html](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.net.-u-r-l/read-text.html).

```
val objectContents = URL(presignedRequest.url.toString()).readText()
println(objectContents)
```

## Configuração avançada de pré-assinatura
<a name="presign-requests-conf-advanced"></a>

No SDK, cada método que pode pré-assinar solicitações tem uma sobrecarga que você pode usar para fornecer opções de configuração avançadas, como uma implementação específica do signatário ou parâmetros de assinatura detalhados.

O exemplo a seguir mostra uma `GetObject` solicitação do Amazon S3 que usa a variante CRT signer e especifica uma data de assinatura futura.

```
val s3 = S3Client.fromEnvironment()

val unsignedRequest = GetObjectRequest {
    bucket = "foo"
    key = "bar"
}

val presignedRequest = s3.presignGetObject(unsignedRequest, signer = CrtAwsSigner) {
    signingDate = Instant.now() + 24.hours
    expiresAfter = 8.hours
}
```

A solicitação pré-assinada devolvida tem data de 24 horas e não é válida antes disso. Ele expira 8 horas depois disso.

## Pré-assinando solicitações POST e PUT
<a name="presign-requests-post-put"></a>

Muitas operações preassináveis exigem somente uma URL e devem ser executadas como solicitações HTTP GET. Algumas operações, no entanto, usam um corpo e devem ser executadas como uma solicitação HTTP POST ou HTTP PUT junto com cabeçalhos em alguns casos. A pré-assinatura dessas solicitações é idêntica à pré-assinatura de solicitações GET, mas invocar a solicitação pré-assinada é mais complicado.

Aqui está um exemplo de pré-assinatura de uma solicitação do S3: `PutObject`

```
val s3 = S3Client.fromEnvironment()

val unsignedRequest = PutObjectRequest {
    bucket = "foo"
    key = "bar"
}

val presignedRequest = s3.presignPutObject(unsignedRequest, 24.hours)
```

O retornado `HttpRequest` tem um valor de método de `HttpMethod.PUT` e inclui uma URL e cabeçalhos que devem ser incluídos na futura invocação da solicitação HTTP. Você pode passar essa solicitação para um chamador que pode executá-la em uma base de código ou ambiente de linguagem de programação diferente.

Depois de criar a solicitação POST ou PUT pré-assinada, use um cliente HTTP para invocar uma solicitação. A API para invocar uma URL de solicitação POST ou PUT depende do cliente HTTP usado. O exemplo a seguir usa um [cliente OkHttp HTTP](https://square.github.io/okhttp) e inclui um corpo que contém`Hello world`.

```
val putRequest = Request
    .Builder()
    .url(presignedRequest.url.toString())
    .apply {
        presignedRequest.headers.forEach { key, values ->
            header(key, values.joinToString(", "))
        }
    }
    .put("Hello world".toRequestBody())
    .build()

val response = okHttp.newCall(putRequest).execute()
```

## Operações que o SDK pode pré-assinar
<a name="presign-ops-supported"></a>

Atualmente, o SDK para Kotlin oferece suporte à pré-assinatura das seguintes operações de API que precisam ser chamadas com o método HTTP associado.


| AWS service (Serviço da AWS) | Operation | Método de extensão do SDK | Use o método HTTP | 
| --- | --- | --- | --- | 
| Amazon S3 | GetObject | [presignGetObject](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.presigners/presign-get-object.html) |  HTTP GET  | 
| Amazon S3 | PutObject | [presignPutObject](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.presigners/presign-put-object.html) |  HTTP PUT  | 
| Amazon S3 | UploadPart |  [presignUploadPart](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.presigners/presign-upload-part.html)  |  HTTP PUT  | 
| AWS Security Token Service | GetCallerIdentity |  [presignGetCallerIdentidade](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/sts/aws.sdk.kotlin.services.sts.presigners/presign-get-caller-identity.html)  |  POSTAGEM HTTP  | 
| Amazon Polly | SynthesizeSpeech |  [presignSynthesizeSpeech](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/polly/aws.sdk.kotlin.services.polly.presigners/presign-synthesize-speech.html)  |  POSTAGEM HTTP  | 