안티패턴: OAuth 토큰에 만료 시간 설정 안 함

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

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

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

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

이 안티패턴은 OAuth 토큰의 긴 만료 시간을 설정하는 안티패턴과 관련이 있습니다.

안티패턴

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

다음 예시 OAuthV2 정책은 <RefreshTokenExpiresIn>의 구성이 누락된 것을 보여줍니다.

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

위의 예에서

  • 액세스 토큰은 합리적으로 짧은 만료 시간인 30분으로 설정되어 있습니다.
  • 갱신 토큰의 만료가 설정되지 않았습니다.
  • 갱신 토큰은 데이터 스토어 (Cassandra)에 영구적으로 유지되어 데이터가 누적됩니다.
  • 만료 없이 생성된 갱신 토큰은 액세스 토큰을 생성하는 데 무기한 사용할 수 있습니다.
  • 이 API에 대한 트래픽이 초당 10개 요청이면 하루에 최대 864,000개의 토큰 을 생성할 수 있습니다.

영향

  • 만료 없이 갱신 토큰을 생성하면 다음과 같은 두 가지 주요 결과가 발생합니다.
    • 갱신 토큰은 향후 언제든지(몇 년 동안) 액세스 토큰을 가져오는 데 사용할 수 있습니다. 보안 문제가 야기될 수 있어요
    • 갱신 토큰이 포함된 Cassandra의 행은 삭제되지 않습니다. 이렇게 하면 Cassandra에 데이터가 누적됩니다.
  • 갱신 토큰을 사용하여 새 액세스 토큰을 가져오지 않고 새 갱신 토큰과 액세스 토큰을 생성하면 이전 갱신 토큰이 Cassandra에 남아 있습니다. 결과적으로 갱신 토큰이 Cassandra에 계속 누적되어 블로트, 디스크 사용량 증가, 더 많은 압축이 발생하고 결국 Cassandra에서 읽기/쓰기 지연 시간이 발생합니다.

권장사항

갱신 토큰과 액세스 토큰 모두에 적절히 짧은 만료 시간을 사용합니다. 갱신 토큰 및 액세스 토큰의 만료 시간 설정에 관한 권장사항 을 참조하세요. 정책에서 액세스 토큰과 갱신 토큰 모두에 만료 구성을 지정해야 합니다. 정책 구성에 관한 자세한 내용은 OauthV2 정책 문서 를 참조하세요.

Edge for Private Cloud 고객을 위한 권장사항

이 섹션에서는 Edge for Private Cloud 고객을 위한 권장사항을 설명합니다.

기본 갱신 토큰 만료 지정

기본적으로 정책 구성에 갱신 토큰 만료가 지정되지 않은 경우 Edge는 만료 없이 갱신 토큰을 만듭니다. 다음 절차에 따라 이 동작을 재정의할 수 있습니다.

  1. 메시지 프로세서 노드에서 구성 재정의 파일 $APIGEE_ROOT/customer/application/message-processor.properties을 수정하거나 만듭니다. 이 파일이 apigee 사용자가 읽을 수 있는지 확인합니다.
  2. 다음 줄을 파일에 추가합니다.
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    이렇게 하면 정책에 지정된 기본 갱신 토큰 만료가 1시간으로 설정됩니다. 비즈니스 요구사항에 따라 이 기본값을 변경할 수 있습니다.
  3. 메시지 프로세서 서비스를 다시 시작합니다.
    apigee-service edge-message-processor restart
  4. 모든 메시지 프로세서 노드에서 위 단계를 하나씩 반복합니다.

Cassandra의 권장사항

공개적으로 제공되는 최신 버전의 Apigee로 업그레이드해 보세요. Apigee는 Apigee 내에서 토큰 관리를 계속 개선하고 최적화하는 수정사항과 개선사항을 계속 출시하고 있습니다. Apigee에서 액세스 토큰과 갱신 토큰은 'kms' 키스페이스 내의 Cassandra에 저장됩니다. 이 키스페이스의 압축 전략이 LeveledCompactionStrategy로 설정되어 있는지 확인해야 합니다. 다음 색인이 없는지 확인해야 합니다.
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 및
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

또한 토큰 삭제로 인해 생성된 툼스톤이 데이터 스토어에서 더 빠르게 삭제되도록 테이블 kms.oauth_20_access_tokensgc_grace_seconds를 기본값인 10일에서 더 낮은 값 (예: 3일)으로 줄일 수 있습니다.

추가 자료