안티패턴: OAuth 토큰의 긴 만료 시간 설정

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

Apigee Edge는 API 보호를 위해 OAuth 2.0 프레임워크를 제공합니다. OAuth2는 가장 널리 사용되는 개방형 표준 토큰 기반 인증 및 승인 체계 중 하나입니다. OAuth2를 사용하면 클라이언트 애플리케이션은 사용자가 사용자 이름 및 비밀번호를 증명하지 않아도 사용자를 대신하여 API에 액세스할 수 있습니다.

Apigee Edge를 사용하면 개발자가 OAuthv2 정책을 사용해 클라이언트 사용자 인증 정보, 비밀번호, 암시적, 승인 코드의 4가지 OAuth2 권한 부여 유형 중 하나를 구현하여 액세스 또는 갱신 토큰을 생성할 수 있습니다. 클라이언트 애플리케이션은 액세스 토큰을 사용하여 보안 API를 소비합니다. 각 액세스 토큰에는 고유한 만료 시간이 있으며, 이는 OAuthv2 정책에서 설정할 수 있습니다.

갱신 토큰은 일부 부여 유형에서 액세스 토큰과 함께 선택적으로 발급됩니다. 갱신 토큰은 원본 액세스 토큰이 만료되거나 취소된 후 유효한 새 액세스 토큰을 얻는 데 사용됩니다. 갱신 토큰의 만료 시간은 OAuthv2 정책에서도 설정할 수 있습니다.

안티패턴

OAuthv2 정책에서 액세스 토큰 또는 갱신 토큰의 만료 시간을 길게 설정하면 OAuth 토큰이 축적되고 Cassandra 노드에서 디스크 공간 사용량이 증가합니다.

다음 OAuthV2 정책 예시에서는 갱신 토큰의 만료 시간이 200일로 길게 나와 있습니다.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

위의 예에서

  • 액세스 토큰은 만료 시간이 30분으로 상당히 낮게 설정됩니다.
  • 갱신 토큰은 200일이라는 매우 긴 만료 시간으로 설정됩니다.
  • 이 API에 대한 트래픽이 초당 10개 요청이면 하루에 최대 864,000개의 토큰을 생성할 수 있습니다.
  • 갱신 토큰은 200일 후에 만료되므로 데이터 저장소(Cassandra)에 오랫동안 유지되며 이것은 연속적인 누적으로 이어집니다.

영향

  • 데이터 저장소(Cassandra)에서 디스크 공간 사용량이 급격히 증가합니다.
  • 프라이빗 클라우드 사용자의 경우 스토리지 비용이 증가할 수 있으며 최악의 경우 디스크가 가득 차 런타임 오류 또는 서비스 중단이 발생할 수 있습니다.

권장사항

구체적인 보안 요구사항에 따라 OAuth 액세스 및 갱신 토큰에 적절한 만료 시간을 적절하게 설정하여 토큰을 빠르게 삭제하여 누적을 방지하세요.

갱신 토큰의 만료 시간을 액세스 토큰보다 조금 더 길게 설정합니다. 예를 들어 액세스 토큰의 만료 시간을 30분으로 설정했다면 갱신 토큰은 60분으로 설정하세요.

이를 통해 다음을 보장할 수 있습니다.

  • 액세스 토큰이 만료된 후 갱신 토큰을 사용하여 새 액세스 및 갱신 토큰을 생성할 충분한 시간이 있습니다.
  • 갱신 토큰은 잠시 후에 만료되므로 누적되지 않고 적절한 시간 안에 삭제될 수 있습니다.

추가 자료