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

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

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 고객을 위한 권장사항

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

기본 갱신 토큰 만료 지정

기본적으로 갱신 토큰 만료 시간이 정책 구성에 지정되지 않으면 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에서 액세스 및 갱신 토큰이 Cassandra의 'kms' 키스페이스에 저장됩니다. 이 키스페이스의 압축 전략을 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

또한 삭제 중인 토큰으로 인해 생성된 Tombstone이 데이터 저장소에서 더 빠르게 삭제되도록 테이블의 kms.oauth_20_access_tokens을 기본값 10일에서 더 낮은 값 (예: 3일)으로 줄일 수 있습니다.gc_grace_seconds

추가 자료