

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 새로 고침 토큰
<a name="amazon-cognito-user-pools-using-the-refresh-token"></a>

새로 고침 토큰을 사용하여 새 ID와 액세스 토큰을 검색할 수 있습니다. 기본적으로 새로 고침 토큰은 애플리케이션 사용자가 사용자 풀에 로그인하고 30일이 지나면 만료됩니다. 사용자 풀에 대한 애플리케이션을 생성할 경우 애플리케이션의 새로 고침 토큰 만료를 60분에서 10년 사이의 값으로 설정할 수 있습니다.

## 새로 고침 토큰으로 새 액세스 및 자격 증명 토큰 받기
<a name="amazon-cognito-user-pools-using-the-refresh-token_initiate-token"></a>

Amazon Cognito는 관리형 로그인 권한 부여 코드 흐름 및 API 작업 또는 SDK 메서드를 사용한 성공적인 인증에 대한 응답으로 새로 고침 토큰을 발급합니다. 새로 고침 토큰은 새 ID 및 액세스 토큰과 선택적으로 새 새로 고침 토큰을 반환합니다. 다음과 같은 방법으로 새로 고침 토큰을 사용할 수 있습니다.

**GetTokensFromRefreshToken**  
[GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html) API 작업은 유효한 새로 고침 토큰에서 새 ID와 액세스 토큰을 발급합니다. 새로 고침 토큰 교체를 활성화한 경우에도 새 새로 고침 토큰이 생성됩니다.

**InitiateAuth 및 AdminitiateAuth**  
[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) 또는 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 작업에는 `REFRESH_TOKEN_AUTH` 인증 흐름이 포함됩니다. 이 흐름에서는 새로 고침 토큰을 전달하고 새 ID 및 액세스 토큰을 가져옵니다. [새로 고침 토큰 교체](#using-the-refresh-token-rotation)가 활성화된 앱 클라이언트에서는 `REFRESH_TOKEN_AUTH`를 사용하여 인증할 수 없습니다.

**OAuth 토큰 엔드포인트**  
[도메인](cognito-user-pools-assign-domain.md)이 있는 사용자 풀의 [토큰 엔드포인트](token-endpoint.md)에는 유효한 새로 고침 토큰에서 새 ID, 액세스 및 선택적으로([새로 고침 토큰 교체](#using-the-refresh-token-rotation) 포함) 새로 고침 토큰을 발급하는 `refresh_token` 권한 부여 유형이 있습니다.

## 새로 고침 토큰 교체
<a name="using-the-refresh-token-rotation"></a>

선택적으로 앱 클라이언트에서 새로 고침 토큰 교체를 구성할 수 있습니다. 새로 고침 토큰 교체를 통해 클라이언트는 원래 새로 고침 토큰을 무효화하고 토큰 새로 고침마다 새로운 새로 고침 토큰을 발급할 수 있습니다. 이 설정이 활성화되면 모든 형태의 토큰 새로 고침에서 성공한 각 요청은 새 ID, 액세스 *및* 새로 고침 토큰을 반환합니다. 이 설정을 비활성화하면 토큰 새로 고침 요청은 새 액세스 및 ID 토큰만 반환하고 원래 새로 고침 토큰은 유효한 상태로 유지됩니다. 새 새로 고침 토큰은 원래 새로 고침 토큰의 남은 기간 동안 유효합니다. 새로 고침 토큰을 교체하거나 원래 새로 고침 토큰을 전달하도록 [앱 클라이언트](user-pool-settings-client-apps.md)를 구성할 수 있습니다. 짧은 기간 동안 재시도를 허용하려면 원래 새로 고침 토큰의 유예 기간을 최대 60초로 구성할 수도 있습니다.

**새로 고침 토큰 교체에 대해 알아야 할 사항**
+ 새로 고침 토큰 교체를 활성화하면 사용자 풀의 JSON 웹 토큰에 새 클레임이 추가됩니다. `origin_jti` 및 `jti` 클레임이 액세스 토큰과 ID 토큰에 추가됩니다. 이러한 클레임으로 인해 JWT의 크기가 커집니다.
+ 새로 고침 토큰 교체는 인증 흐름 `REFRESH_TOKEN_AUTH`와 호환되지 않습니다. 새로 고침 토큰 교체를 구현하려면 앱 클라이언트에서 이 인증 흐름을 비활성화하고 [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html) API 작업 또는 이에 상응하는 SDK 방법을 사용하여 토큰 새로 고침 요청을 제출하도록 애플리케이션을 설계해야 합니다.
+ 새로 고침 토큰 교체가 비활성화된 상태에서 `GetTokensFromRefreshToken` 또는 `REFRESH_TOKEN_AUTH`를 사용하여 토큰 새로 고침 요청을 완료할 수 있습니다.
+ 사용자 풀에서 [디바이스 기억하기](amazon-cognito-user-pools-device-tracking.md)가 활성 상태인 경우 `GetTokensFromRefreshToken` 요청에 디바이스 키를 제공해야 합니다. 사용자에게 애플리케이션이 초기 인증 요청에서 제출하는 확인된 디바이스 키가 없는 경우 Amazon Cognito는 새 키를 발급합니다. 이 구성에서 토큰을 새로 고치려면 `AuthParameters`에서 토큰을 지정했는지 아니면 인증 응답에서 새 토큰을 수신했는지에 관계없이 디바이스 키를 제공해야 합니다.
+ `GetTokensFromRefreshToken` 요청에서 사전 토큰 생성 Lambda 트리거에 `ClientMetadata`를 전달할 수 있습니다. 트리거의 입력 이벤트에 전달되는 이 데이터는 Lambda 함수의 사용자 지정 로직에 사용할 수 있는 추가 컨텍스트를 제공합니다.

보안 모범 사례로 앱 클라이언트에서 새로 고침 토큰 교체를 활성화합니다.

------
#### [ Enable refresh token rotation (console) ]

다음 절차에서는 앱 클라이언트에 대해 새로 고침 토큰 교체를 켜거나 끕니다. 이 절차에는 기존 앱 클라이언트가 필요합니다. 앱 클라이언트 생성에 대해 자세히 알아보려면 [앱 클라이언트를 사용한 애플리케이션별 설정](user-pool-settings-client-apps.md) 섹션을 참조하세요.

**새로 고침 토큰 교체 활성화 방법**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **앱 클라이언트** 메뉴로 이동하여 기존 앱 클라이언트를 선택합니다.

1. 페이지의 **앱 클라이언트 정보** 섹션에서 **편집**을 선택합니다.

1. **고급 보안 구성**에서 **새로 고침 토큰 교체 활성화** 옵션을 찾습니다.

1. 교체를 활성화하려면 확인란을 선택합니다. 교체를 비활성화하려면 확인란을 선택 취소합니다.

1. **새로 고침 토큰 교체 유예 기간**에 교체된 새로 고침 토큰이 취소되기 전의 지연으로 설정할 초 수를 최대 60까지 입력합니다.

------
#### [ Enable refresh token rotation (API) ]

[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) 또는 [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) API 요청에서 새로 고침 토큰 교체를 구성합니다. 다음 부분 요청 본문은 새로 고침 토큰 교체를 켜고 유예 기간을 10초로 설정합니다.

```
"RefreshTokenRotation" : {
   "Feature" : "ENABLED,
   "RetryGracePeriodSeconds" : 10
}
```

------

## API 및 SDK 토큰 새로 고침
<a name="using-the-refresh-token-api"></a>

새로 고침 토큰 교체가 활성 상태인지 여부에 따라 새로 고침 토큰을 사용하여 사용자 풀 API로 새 ID 및 액세스 토큰을 가져오는 두 가지 방법이 있습니다. 새로 고침 토큰 교체가 활성화된 앱 클라이언트에서 [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html) API 작업을 사용합니다. 새로 고침 토큰 교체가 없는 앱 클라이언트에서는 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) 또는 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 작업의 `REFRESH_TOKEN_AUTH` 흐름을 사용합니다.

**참고**  
사용자는 [관리형 로그인](cognito-user-pools-managed-login.md) 또는 AWS SDKs 및 Amazon Cognito API 작업으로 빌드하는 사용자 지정 애플리케이션에서 사용자 풀로 인증할 수 있습니다. `REFRESH_TOKEN_AUTH` 흐름 및 `GetTokensFromRefreshToken` 모두 관리형 로그인 사용자의 토큰 새로 고침을 완료할 수 있습니다. 사용자 지정 애플리케이션의 토큰 새로 고침은 관리형 로그인 세션에 영향을 주지 않습니다. 이러한 세션은 브라우저 쿠키에 설정되며 1시간 동안 유효합니다. `GetTokensFromRefreshToken` 응답은 새 ID, 액세스 및 선택적으로 새로 고침 토큰을 발급하지만 관리형 로그인 세션 쿠키는 갱신하지 않습니다.  
새로 고침 토큰 교체가 활성화된 앱 클라이언트에서는 `REFRESH_TOKEN_AUTH`를 사용할 수 없습니다.

------
#### [ GetTokensFromRefreshToken ]

[GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)은 새로 고침 토큰으로 권한을 부여하는 요청에서 새 ID, 액세스 및 새로 고침 토큰을 반환합니다. 다음은 `GetTokensFromRefreshToken`에 대한 요청 본문의 예입니다. 이 작업에 대한 요청에서 Lambda 트리거에 클라이언트 메타데이터를 제출할 수 있습니다.

```
{
    "RefreshToken": "{{eyJjd123abcEXAMPLE}}",
    "ClientId": "{{1example23456789}}",
    "ClientSecret": "{{myappclientsecret123abc}}",
    "ClientMetadata": { 
      "{{MyMetadataKey}}" : "{{MyMetadataValue}}" 
   },
}
```

------
#### [ AdminInitiateAuth/InitiateAuth ]

새로 고침 토큰 교체가 비활성 상태일 때 새로 고침 토큰을 사용하려면 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) 또는 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 작업을 사용합니다. `AuthFlow` 파라미터에 `REFRESH_TOKEN_AUTH`를 전달합니다. `AuthFlow`의 `AuthParameters` 속성에서 사용자의 새로 고침 토큰을 `"REFRESH_TOKEN"` 값으로 전달합니다. Amazon Cognito는 API 요청이 모든 챌린지를 전달한 후 새 ID 및 액세스 토큰을 반환합니다.

다음은 `InitiateAuth` 또는 `AdminInitiateAuth` API를 사용한 토큰 새로 고침 요청 본문의 예입니다.

```
{
    "AuthFlow": "REFRESH_TOKEN_AUTH",
    "ClientId": "{{1example23456789}}",
    "UserPoolId": "{{us-west-2_EXAMPLE}}",
    "AuthParameters": {
        "REFRESH_TOKEN": "{{eyJjd123abcEXAMPLE}}",
        "SECRET_HASH": "{{kT5acwCVrbD6JexhW3EQwnRSe6fLuPTRkEQ50athqv8=}}"
    }
}
```

------

## OAuth 토큰 새로 고침
<a name="using-the-refresh-token-oauth"></a>

도메인을 구성한 사용자 풀의 [Token 엔드포인트](token-endpoint.md)에 새로 고침 토큰을 제출할 수도 있습니다. 요청 본문에 `refresh_token`의 `grant_type` 값과 사용자 새로 고침 토큰의 `refresh_token` 값을 포함합니다.

토큰 엔드포인트에 대한 요청은 새로 고침 토큰 교체가 활성화된 앱 클라이언트와 토큰 교체가 비활성화된 앱 클라이언트에서 사용할 수 있습니다. 새로 고침 토큰 교체가 활성화되면 토큰 엔드포인트가 새 새로 고침 토큰을 반환합니다.

다음은 새로 고침 토큰을 사용한 요청의 예입니다.

```
POST /oauth2/token HTTP/1.1
Host: {{auth.example.com}}
Content-Type: application/x-www-form-urlencoded
Authorization: Basic {{ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw}}
Content-Length: **

client_id={{1example23456789}}&grant_type=refresh_token&refresh_token={{eyJjd123abcEXAMPLE}}
```

## 새로 고침 토큰 철회
<a name="amazon-cognito-identity-user-pools-revoking-all-tokens-for-user"></a>

사용자에게 속한 새로 고침 토큰을 취소할 수 있습니다. 토큰 취소에 대한 자세한 내용은 [토큰 취소로 사용자 세션 종료](token-revocation.md) 섹션을 참조하세요.

**참고**  
새로 고침 토큰을 취소하면 Amazon Cognito가 해당 토큰을 사용하여 새로 고침 요청에서 발급한 모든 ID 및 액세스 토큰이 취소됩니다.

현재 로그인한 모든 세션에서 사용자를 로그아웃하려면 [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) 또는 [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html) API 요청을 사용하여 모든 토큰을 취소합니다. 사용자가 로그아웃하면 다음과 같은 효과가 발생합니다.
+ 사용자의 새로 고침 토큰을 사용하여 사용자에 대한 새 토큰을 가져올 수 없습니다.
+ 사용자의 액세스 토큰을 사용하여 토큰으로 권한이 부여된 API 요청을 할 수 없습니다.
+ 새 토큰을 가져오려면 사용자가 다시 인증해야 합니다. 관리형 로그인 세션 쿠키는 자동으로 만료되지 않으므로 보안 인증 정보를 입력하라는 추가 메시지 없이 사용자가 세션 쿠키를 사용하여 다시 인증할 수 있습니다. 관리형 로그인 사용자를 로그아웃한 후 [Logout 엔드포인트](logout-endpoint.md)로 리디렉션하면 Amazon Cognito가 세션 쿠키를 지웁니다.

새로 고침 토큰을 사용하면 앱에서 사용자의 세션을 오랫동안 유지할 수 있습니다. 시간이 지남에 따라 사용자는 새로 고침 토큰으로 로그인한 상태로 유지된 일부 애플리케이션의 권한을 취소할 수 있습니다. 단일 세션에서 사용자를 로그아웃하려면 새로 고침 토큰을 취소합니다. 사용자가 인증된 모든 세션에서 로그아웃하려는 경우 [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) API 요청을 생성합니다. 앱에서 사용자에게 **모든 디바이스에서 로그아웃**과 같은 선택 항목을 제공할 수 있습니다. `GlobalSignOut`은 변경되지 않고 만료되지 않고 취소되지 않은 사용자의 유효한 액세스 토큰을 허용합니다. 이 API는 토큰으로 권한이 부여되었기 때문에 한 사용자가 이 API를 사용하여 다른 사용자의 로그아웃을 시작할 수 없습니다.

그러나 자격 AWS 증명으로 모든 디바이스에서 사용자를 로그아웃하도록 권한을 부여하는 [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html) API 요청을 생성할 수 있습니다. 관리자 애플리케이션은 AWS 개발자 자격 증명으로이 API 작업을 호출하고 사용자 풀 ID와 사용자의 사용자 이름을 파라미터로 전달해야 합니다. `AdminUserGlobalSignOut` API를 사용하면 사용자 풀의 모든 사용자를 로그아웃할 수 있습니다.

자격 AWS 증명 또는 사용자의 액세스 토큰으로 권한을 부여할 수 있는 요청에 대한 자세한 내용은 섹션을 참조하세요[권한 부여 모델별로 그룹화된 API 작업 목록](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth).