사용자 인증

이 페이지에서는 Cloud Endpoints 프레임워크를 사용하는 클라이언트 애플리케이션에서 사용자 인증 지원을 API에 추가하는 방법을 설명합니다. 현재는 Android 및 자바스크립트 클라이언트가 지원됩니다.

Endpoints Frameworks는 다음 기술을 사용하는 클라이언트 애플리케이션의 사용자 인증을 지원합니다.

어떤 인증 방법을 사용하든 다음 섹션의 설명에 따라 적절한 인증을 확인해야 하는 각 API 메서드에서 유효한 User를 확인해야 합니다.

기본 요건

이 페이지에서는 다음 작업을 이미 완료했다고 가정합니다.

  • Google Cloud 프로젝트를 만들었습니다.

  • API 관리를 추가했습니다.

  • 인증된 요청을 API로 보내기 위해 클라이언트에서 JWT를 사용하는 경우 JWT가 HTTP 요청의 승인 헤더에 있어야 합니다. JWT는 다음과 같은 필수 클레임을 포함해야 합니다.

    • iss
    • sub
    • aud
    • iat
    • exp

Firebase 인증을 사용하여 인증

Firebase 인증을 사용하는 클라이언트 호출을 지원하려면 다음 안내를 따르세요.

  1. API 클래스에 App Engine Cloud Endpoints API를 가져옵니다.

    import endpoints
    
  2. 각 클라이언트의 Firebase 발급기관 객체를 API 데코레이터에 추가합니다. 예를 들면 다음과 같습니다.

    @endpoints.api(
        name='YOUR_API_NAME',
        version='VERSION_NUMBER',
        issuers={'firebase': endpoints.Issuer(
            'https://securetoken.google.com/YOUR_PROJECT_ID,
            'https://www.googleapis.com/service_accounts/VERSION_NUMBER/metadata/x509/securetoken@system.gserviceaccount.com')})
    
    • YOUR_API_NAME을 API의 이름으로 바꿉니다.
    • VERSION_NUMBER를 API 버전으로 바꿉니다(예: v1).
    • 코드> YOUR_PROJECT_ID를 클라이언트의 Google Cloud 프로젝트 ID로 바꿉니다.
  3. 인증이 적합한지 확인하려는 각 API 메서드에서 유효한 User가 있는지 확인하고, 없는 경우 이 샘플 메서드 정의에 표시된 것처럼 error 401을 일으킵니다.

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. Endpoints API를 배포합니다. 클라이언트를 새로 추가할 때마다 Endpoints API를 다시 배포해야 합니다.

클라이언트에 Firebase 인증 추가

Firebase 문서에 설명된 대로 코드에 Firebase 인증을 추가할 수 있습니다. 클라이언트에는 연관된 Google Cloud 프로젝트가 있어야 하고, 프로젝트 ID가 API의 Firebase 발급기관 구성에 나열되어 있어야 합니다.

Auth0을 사용하여 인증

Auth0를 사용하는 클라이언트의 호출을 지원하려면 다음 안내를 따르세요.

  1. API 클래스에 App Engine Endpoints API를 가져옵니다.

    import endpoints
    
  2. 각 클라이언트의 Auth0 발급기관 객체를 API 데코레이터에 추가합니다. 예를 들면 다음과 같습니다.

    @endpoints.api(
        name='YOUR_API_NAME',
        version='VERSION_NUMBER',
        issuers={'auth0': endpoints.Issuer(
            'https://YOUR_ACCOUNT_NAME.auth0.com',
            'https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json')})
    
    • YOUR_API_NAME을 API의 이름으로 바꿉니다.
    • VERSION_NUMBER를 API 버전으로 바꿉니다(예: v1).
    • YOUR_ACCOUNT_NAME을 클라이언트에 사용된 Auth0 계정 이름으로 바꿉니다.
  3. 인증이 적합한지 확인하려는 각 API 메서드에서 유효한 User가 있는지 확인하고, 없는 경우 이 샘플 메서드 정의에 표시된 것처럼 error 401을 일으킵니다.

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. API를 배포합니다. 클라이언트를 새로 추가할 때마다 API를 다시 배포해야 합니다.

클라이언트에 Auth0 인증 추가

Auth0 문서의 설명 대로 Auth0 인증을 코드에 추가할 수 있습니다. API의 Auth0 발급기관 구성에 클라이언트가 나열되어야 합니다.

Google ID 토큰을 사용하여 인증

Google ID 토큰을 사용하여 인증하는 클라이언트의 호출을 지원하려면 다음 단계를 따르세요.

  1. 각 클라이언트 애플리케이션에 대해 OAuth 2 클라이언트 ID를 가져옵니다. 클라이언트 애플리케이션 소유자는 Google Cloud Console에서 클라이언트 ID를 생성해야 합니다. 자세한 내용은 클라이언트 ID 만들기를 참조하세요.

  2. API 클래스에 App Engine Endpoints API를 가져옵니다.

    import endpoints
    
  3. allowed_client_ids에 API에 대한 액세스 권한을 부여할 클라이언트 ID를 모두 지정하고, API 데코레이터audiences 필드에 Android 클라이언트에 속하는 클라이언트 ID도 지정합니다. 예를 들면 다음과 같습니다.

    @endpoints.api(
        name='YOUR_API_NAME',
        version='VERSION_NUMBER',
        allowed_client_ids=ALLOWED_CLIENT_IDS,
        audiences=[ANDROID_AUDIENCE])
    class AuthedGreetingApi(remote.Service):
        # ...
    

    ALLOWED_CLIENT_IDS를 각 클라이언트 프로젝트에서 생성된 OAuth 2 클라이언트 ID 목록으로 바꾸고 ANDROID_AUDIENCE를 Android 웹 클라이언트 ID 목록으로 바꿉니다. 웹 클라이언트 ID는 .apps.googleusercontent.com이 추가된 클라이언트 ID입니다(예: YOUR_CLIENT_ID.apps.googleusercontent.com).

  4. 인증이 적합한지 확인하려는 각 API 메서드에서 유효한 User가 있는지 확인하고, 없는 경우 이 샘플 메서드 정의에 표시된 것처럼 error 401을 일으킵니다.

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  5. Endpoints API를 배포합니다. 클라이언트를 새로 추가할 때마다 Endpoints API를 다시 배포해야 합니다.

클라이언트에 Google ID 토큰 인증 추가

클라이언트에 인증 코드 추가에 대한 자세한 내용은 다음을 참조하세요.

다음 단계

사용자 인증에 대한 배경 정보와 API 키 승인의 차이점을 보려면 API 키를 사용하는 시점과 이유를 참조하세요.