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

Apigee X 문서입니다.
Apigee Edge 문서 보기

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

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

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

안티패턴

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

다음 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분을 설정한 후 갱신 토큰에 대해 최소 24시간을 설정합니다.

이렇게 하면 다음과 같은 이점이 있습니다.

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

추가 자료