OAuth 클라이언트를 공유하는 방법

이 페이지에서는 조직 내의 다른 앱과 OAuth 클라이언트를 공유하는 방법을 설명합니다.

개요

프로젝트 간에 OAuth 클라이언트를 공유하면 조직의 모든 앱에 사용할 새 OAuth 클라이언트를 일일이 생성할 필요가 없습니다. OAuth 클라이언트 하나를 직접 생성한 후 앱 여러 개에 프로그래매틱 방식으로 할당하면 됩니다.

OAuth 클라이언트 공유는 Identity-Aware Proxy(IAP)를 사용 설정할 수 있지만 사용자 인증 정보 페이지에 액세스할 수 없는 에이전트와 기본 OAuth 클라이언트를 공유하는 경우에도 사용됩니다.

모바일 앱은 다른 프로젝트의 OAuth 클라이언트로 인증할 수 없습니다.

시작하기 전에

아래 가이드 중 하나에 따라 앱에 IAP를 사용 설정하고 OAuth 클라이언트를 만듭니다.

현재는 App Engine과 클라이언트 공유가 지원되지 않습니다.

Compute Engine 앱에 공유 클라이언트 할당

  1. 인스턴스 그룹 페이지로 이동하여 인스턴스가 인스턴스 그룹에 있는지 확인합니다.
  2. 백엔드 서비스를 정의합니다.
  3. 부하 분산을 설정합니다.
  4. gcloud 명령줄 도구를 사용하여 gcloud auth login을 실행합니다.
  5. 표시된 URL을 따라서 로그인합니다.
  6. 로그인한 후에는 표시된 인증 코드를 복사해 명령줄에 붙여넣습니다.
  7. IAP를 사용 설정하려는 프로젝트에 대해 gcloud config set project PROJECT_ID를 실행합니다.
  8. IAP를 사용 설정하려면 사용자 인증 정보 페이지의 공유 클라이언트 ID 및 보안 비밀번호를 사용하고 다음 명령어를 실행합니다.

    gcloud compute backend-services update BACKEND_SERVICE_NAME  \
       --global --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    

GKE 앱에 공유 클라이언트 할당

다음 명령어를 실행하는 경우 공유 클라이언트의 ID 및 보안 비밀을 사용하는 대신 앱의 BackendConfig 파일 구성 단계를 따릅니다.

kubectl create secret generic my-secret --from-literal=client_id=CLIENT_ID \
    --from-literal=client_secret=CLIENT_SECRET

위험

앱 간에 클라이언트를 공유하면 편리하지만 위험한 상황이 발생할 수 있습니다. 이 섹션에서는 클라이언트를 공유할 때 발생할 수 있는 위험과 이를 완화하는 방법에 대해 설명합니다.

단일 장애점

여러 앱에 OAuth 클라이언트 하나를 사용하면 단일 장애점이 생깁니다. 클라이언트를 잘못 삭제하거나 수정하면 이 클라이언트를 사용하는 모든 앱에 영향을 미칩니다.

이 영향을 줄이려면 공유 클라이언트에 중요한 사용 사례를 수행할 때만 클라이언트를 공유합니다.

클라이언트 보안 비밀번호 유출

클라이언트를 공유하려면 클라이언트 보안 비밀번호를 다른 사용자 및 스크립트와 공유해야 합니다. 이로 인해 클라이언트 보안 비밀번호 유출 위험이 높아집니다. IAP는 앱에서 만든 토큰과 유출된 클라이언트 보안 비밀번호로 만든 토큰을 구별할 수 없습니다.

Cloud Audit Logging을 사용하여 IAP 리소스에 대한 액세스를 모니터링할 수 있습니다. 클라이언트 보안 비밀번호가 유출될 가능성이 있다고 생각되면 사용자 인증 정보 페이지에서 재설정하세요.

이 위험을 줄이려면 클라이언트 보안 비밀번호를 보호합니다. 보안 비밀번호 공유를 제한하고 일반 텍스트로 저장하지 마세요.

승인된 사용자의 명의 도용

클라이언트 보안 비밀번호가 유출된 경우 악성 앱이 도메인의 IAP 인증 브라우저 쿠키를 설정하여 승인된 사용자를 가장할 수 있습니다. 이 쿠키를 사용하면 IAP는 유출된 클라이언트 보안 비밀번호를 공유하는 모든 앱의 가장된 사용자를 인증합니다.

이 위험을 줄이려면 승인된 사용자도 공유하는 리소스 간에 클라이언트를 공유하지 마세요. 리소스별 권한을 설정하여 가장된 사용자가 인증되는 경우에도 IAP에서 액세스를 승인하지 않도록 합니다.

사용자 ID 수집

클라이언트 보안 비밀번호가 유출된 경우 악성 앱이 클라이언트 ID를 사용하여 앱 사용자의 ID를 수집할 수 있습니다. 이 동작은 사용자가 악성 앱을 방문하면 작동됩니다.

사용자가 처음으로 IAP 보호 앱에 액세스하면 앱에 ID를 공유하라는 메시지가 표시됩니다. 이를 통해 사용자는 자신의 개인정보를 제어할 수 있습니다. 사용자가 ID 공유에 동의하면 Google 로그인 시스템은 이 동의 내용을 기록합니다. IAP는 동일한 프로젝트의 클라이언트 ID로 수행되는 이후 요청에 대해 사용자에게 다시 알리지 않습니다.

자신의 앱에 ID를 공유하는 데 동의했고 악성 앱에 방문하는 사용자는 동의하지 않아도 자신의 ID가 즉시 공유됩니다.