사용자 인증

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

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

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

기본 요건

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

Firebase 인증을 사용하여 인증

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

  1. Firebase 프로젝트를 아직 만들지 않았다면 지금 만듭니다. Firebase 프로젝트는 Firebase 서비스를 사용하는 Google Cloud Console 프로젝트입니다. 자세한 내용은 Firebase 프로젝트란 무엇인가요?Firebase 문서를 참조하세요.

  2. 다음을 @Api 또는 메서드 주석에 추가합니다.

    • authenticators 매개변수를 주석에 추가한 후 {EspAuthenticator.class} 값으로 설정합니다.
    • @ApiIssuer가 포함된 issuers 매개변수를 추가한 후 Firebase로 설정합니다.
    • @ApiIssuerAudience가 포함된 issuerAudiences 매개변수를 추가한 후 Firebase와 프로젝트 ID로 설정합니다.

    예를 들면 다음과 같습니다.

    @Api(
        name = "YOUR_API_NAME",
        version = "VERSION_NUMBER",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "firebase",
                issuer = "https://securetoken.google.com/YOUR_PROJECT_ID",
                jwksUri = "https://www.googleapis.com/service_accounts/VERSION_NUMBER/metadata/x509/securetoken@system.gserviceaccount.com")
        },
        issuerAudiences = {
            @ApiIssuerAudience(name = "firebase", audiences = "YOUR_PROJECT_ID")
        })
    
    • YOUR_API_NAME을 API의 이름으로 바꿉니다.
    • VERSION_NUMBER를 API 버전으로 바꿉니다(예: v1).
    • YOUR_PROJECT_ID 인스턴스 2개를 모두 Firebase 프로젝트 ID로 바꿉니다.
  3. API 구현 코드에서 Users를 가져옵니다.

    import com.google.api.server.spi.auth.common.User;
    
  4. 인증이 적합한지 확인하려는 각 API 메서드에서 User가 유효한지 확인합니다. 이 샘플 메서드 정의에 표시된 것처럼 유효하지 않으면 예외가 발생합니다.

    @ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
    public Email getUserEmail(User user) throws UnauthorizedException {
      if (user == null) {
        throw new UnauthorizedException("Invalid credentials");
      }
    
      Email response = new Email();
      response.setEmail(user.getEmail());
      return response;
    }
    
  5. 새 클라이언트를 추가할 때마다 API를 재배포합니다.

클라이언트에 Firebase 인증 추가

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

Auth0을 사용하여 인증

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

  1. 다음을 @Api 또는 메서드 주석에 추가합니다.

    • authenticators 매개변수를 주석에 추가하고 {EspAuthenticator.class} 값으로 설정합니다.
    • @ApiIssuer가 포함된 issuers 매개변수를 추가한 후 Auth0으로 설정합니다.
    • @ApiIssuerAudience가 포함된 issuerAudiences 매개변수를 추가한 후 Auth0과 Auth0 클라이언트 ID로 설정합니다.

    예를 들면 다음과 같습니다.

    @Api(
        name = "YOUR_API_NAME",
        version = "VERSION_NUMBER",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "auth0",
                issuer = "https://YOUR_ACCOUNT_NAME.auth0.com/",
                jwksUri = "https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json")
         },
         issuerAudiences = {
             @ApiIssuerAudience(name = "auth0", audiences = "AUTH0_CLIENT_ID")
        })
    
    • YOUR_API_NAME을 API의 이름으로 바꿉니다.
    • VERSION_NUMBER를 API 버전으로 바꿉니다(예: v1).
    • YOUR_ACCOUNT_NAME을 클라이언트에 사용된 Auth0 계정 이름으로 바꿉니다.
    • AUTH0_CLIENT_ID를 클라이언트에 사용할 ID로 바꿉니다.
  2. API 구현 코드에서 Users를 가져옵니다.

    import com.google.api.server.spi.auth.common.User;
    
  3. 인증이 적합한지 확인하려는 각 API 메서드에서 User가 유효한지 확인합니다. 이 샘플 메서드 정의에 표시된 것처럼 유효하지 않으면 예외가 발생합니다.

    @ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
    public Email getUserEmail(User user) throws UnauthorizedException {
      if (user == null) {
        throw new UnauthorizedException("Invalid credentials");
      }
    
      Email response = new Email();
      response.setEmail(user.getEmail());
      return response;
    }
    
  4. 새 클라이언트를 추가할 때마다 API를 재배포합니다.

클라이언트에 Auth0 인증 추가

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

Google ID 토큰을 사용하여 인증

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

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

  2. 액세스 권한을 부여하는 각 클라이언트 앱에 대해 클라이언트 ID가 포함된 clientIds 항목을 추가하고, @Api 주석에서 각 Android 클라이언트에 대해서도 audiences 항목을 추가합니다.

    예를 들면 다음과 같습니다.

    @Api(
       name = "YOUR_API_NAME",
       version = "VERSION_NUMBER",
       clientIds = {"YOUR_CLIENT_ID"},
       audiences = {"YOUR_CLIENT_ID"}
    )
    
    • YOUR_API_NAME을 API의 이름으로 바꿉니다.
    • VERSION_NUMBER를 API 버전으로 바꿉니다(예: v1).
    • YOUR_CLIENT_ID를 클라이언트 애플리케이션 프로젝트에서 생성된 OAuth 2 클라이언트 ID로 바꿉니다.
  3. API 구현 코드에서 Users를 가져옵니다.

    import com.google.api.server.spi.auth.common.User;
    
  4. 인증이 적합한지 확인하려는 각 API 메서드에서 User가 유효한지 확인합니다. 이 샘플 메서드 정의에 표시된 것처럼 유효하지 않으면 예외가 발생합니다.

    @ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
    public Email getUserEmail(User user) throws UnauthorizedException {
      if (user == null) {
        throw new UnauthorizedException("Invalid credentials");
      }
    
      Email response = new Email();
      response.setEmail(user.getEmail());
      return response;
    }
    
  5. 새 클라이언트를 추가할 때마다 API를 재배포합니다.

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

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

클라이언트에서 JWT 전송

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

  • iss
  • sub
  • aud
  • iat
  • exp

다음 단계

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