Google 인증 확장 프로그램

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

<ph type="x-smartling-placeholder">

버전: 1.3.1

지정한 Google API에 액세스하려면 Google에 인증합니다.

이 확장 프로그램을 사용하여 Google Cloud 서비스용 토큰 (OAuth 또는 JWT)을 얻은 다음 Service콜아웃 정책 사용 등으로 후속 Google API 호출에 이 토큰을 사용합니다.

예를 들어 API 프록시에서 이 확장 프로그램이 포함된 토큰을 가져오고 PopulationCache 정책을 사용하여 토큰을 캐시한 다음 Service콜아웃 정책을 통해 토큰을 전달하여 API 프록시 흐름 내에서 Google Cloud 서비스에 액세스할 수 있습니다.

기본 요건

이 콘텐츠는 이 확장 프로그램을 구성하고 사용하기 위한 참조를 제공합니다. 확장 문구 정책을 사용하여 API 프록시의 확장 프로그램을 사용하려면 먼저 다음 요건을 충족해야 합니다.

  1. 확장 프로그램에서 사용할 계정(사용자 인증 정보에 사용할 서비스 계정에 의해 표시되는 계정)에 확장 프로그램이 인증할 Google Cloud 서비스에 대한 액세스 권한이 있어야 합니다.

  2. Google Cloud 콘솔을 사용하여 서비스 계정의 키를 생성합니다.

  3. 구성 참조를 사용하여 확장 프로그램을 추가 및 구성할 때 결과 서비스 계정 키 JSON 파일의 콘텐츠를 사용합니다.

Google Cloud로 인증 정보

이 확장 프로그램은 Google Cloud 프로젝트에 정의된 특정 구성원을 대표하여 Google Cloud에 인증을 요청합니다. 이 확장 프로그램을 구성할 때 해당 프로젝트 구성원의 서비스 계정 JSON 파일을 사용합니다.

따라서 이 확장 프로그램은 해당 구성원이 권한을 가진 리소스에만 액세스할 수 있습니다. 즉, 이 확장 프로그램의 인증 성공 여부는 Google Cloud 콘솔에서 부여된 권한과 런타임에 확장 프로그램에서 요청한 액세스 (범위 또는 잠재고객을 통해)가 일치하느냐에 따라 달라집니다.

일반적으로 이 확장 프로그램에서 API에 액세스하기 위해 인증하는 단계는 다음과 같습니다.

  1. 이 확장 프로그램이 나타내는 구성원 서비스 계정에 액세스하려는 Google 리소스에 대한 액세스 권한이 있는지 확인하세요. Google Cloud 콘솔의 Cloud Identity and Access Management (Cloud IAM) 페이지를 사용하여 이 확장 프로그램이 대표하는 프로젝트 구성원에게 역할을 부여할 수 있습니다.

  2. 이 확장 프로그램을 구성할 때 해당 구성원의 서비스 계정 키 JSON을 사용합니다.

  3. 이 확장 프로그램을 사용하기 위해 Extension콜아웃 정책을 구성할 때 프로젝트 구성원이 액세스할 수 있는 리소스에 대해서만 인증을 요청하세요.

샘플

다음 예는 Extension콜아웃 정책을 사용하여 Google Cloud에 인증하는 방법을 보여줍니다.

액세스 토큰 가져오기

다음 예에서 확장 프로그램의 getOauth2AccessToken 작업은 Cloud Translation API에 대한 요청에 사용할 토큰을 검색합니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
    <DisplayName>Get Access Token</DisplayName>
    <Connector>google-auth</Connector>
    <Action>getOauth2AccessToken</Action>
    <Input><![CDATA[{
      "scope" : [
        "https://www.googleapis.com/auth/cloud-translation"
      ]
    }]]></Input>
    <Output>google.credentials</Output>
</ConnectorCallout>

응답 값은 다음과 같습니다.

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":"Bearer",
  "expiresInSec": 3600
}

다음 AssignMessage 정책은 위의 Extension콜아웃 정책에서 응답 값을 가져와 응답 페이로드에 복사합니다. 이는 디버깅에 유용할 수 있습니다. 실제로는 클라이언트에 토큰을 반환하지 않는 것이 바람직할 수도 있습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
    <DisplayName>Retrieve Auth Token</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{google.credentials.access_token}</Payload>
    </Set>
</AssignMessage>

액세스 토큰 캐시

토큰을 검색하는 데 불필요한 호출을 하지 않으려면 수신한 토큰을 캐시하는 것이 좋습니다. 토큰이 필요한 후속 호출의 경우 Apigee Edge 캐시에서 토큰을 가져오는 것이 새 토큰을 가져오는 것보다 빠릅니다. 캐시된 토큰이 만료되면 새 토큰을 검색하고 해당 토큰으로 캐시를 새로고침합니다.

예시 API 프록시의 다음 코드는 ServiceCallout 정책으로 캐시된 토큰을 설정하고 사용하여 Google Translation API를 호출하는 방법을 보여줍니다. 여기에 표시된 각 코드 예시는 흐름의 서로 다른 정책을 위한 것입니다.

다음 정책은 다음 흐름 XML에 설명된 순서대로 실행됩니다.

  <Request>
    <!-- Attempt to get a token from the cache. -->
    <Step>
        <Name>Get-Cached-Auth-Token</Name>
    </Step>
    <!-- Only execute the following ExtensionCallout policy if the call to the
      cache couldn't retrieve a cached token. -->
    <Step>
        <Name>Google-Auth-Callout</Name>
        <Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
    </Step>
    <!-- Only execute the following PopulateCache policy if the call to the
      cache couldn't retrieve a cached token. -->
    <Step>
        <Name>Cache-Auth-Token</Name>
        <Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
    </Step>
    <!-- Use the ServiceCallout policy to call the translate API. -->
    <Step>
        <Name>Translate-Text</Name>
    </Step>
</Request>
  1. 다음 LookupCache 정책은 캐시에서 토큰을 가져오려고 시도합니다. 토큰을 이미 가져와 캐시한 경우 이 정책은 토큰을 API 프록시에서 사용할 수 있도록 가져옵니다.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token">
          <DisplayName>Get Cached Auth Token</DisplayName>
          <!-- Give cache key and scope to specify the entry for the cached token. -->
          <CacheKey>
              <Prefix/>
              <KeyFragment>gcp_translate_token_</KeyFragment>
          </CacheKey>
          <Scope>Exclusive</Scope>
          <!-- Assign the retrieved token (if any) to a variable, where it
           can be retrieved by policies. -->
          <AssignTo>cloud.translation.auth.token</AssignTo>
      </LookupCache>
    
  2. 캐시 조회로 캐시된 토큰이 검색되지 않으면 다음 ExtensionCallback 정책은 Google Cloud Translation API를 토큰 범위로 지정하여 새 OAuth 토큰을 가져옵니다. Google-Auth-Callout 확장 프로그램을 구성할 때 사용된 서비스 계정 사용자 인증 정보가 API에 액세스할 수 있는 프로젝트 구성원을 나타내는 경우 Google Cloud는 유효한 토큰을 반환합니다.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout">
          <DisplayName>Google-Auth-Callout</DisplayName>
          <Connector>example-auth-extension</Connector>
          <Action>getOauth2AccessToken</Action>
          <Input><![CDATA[{
            "scope" : ["https://www.googleapis.com/auth/cloud-translation"]
          }]]></Input>
          <Output parsed="false">cloud.translation.auth.token</Output>
      </ConnectorCallout>
    
  3. ExtensionCallback 정책에서 새 토큰을 가져오면 PopulationCache 정책에 의해 나중에 API 프록시 정책에서 사용할 수 있도록 캐시됩니다.

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token">
          <DisplayName>Cache Auth Token</DisplayName>
          <Properties/>
          <!-- Set cache key information to specify a unique key for this entry. -->
          <CacheKey>
              <Prefix/>
              <KeyFragment>gcp_translate_token_</KeyFragment>
          </CacheKey>
          <Scope>Exclusive</Scope>
          <ExpirySettings>
              <TimeoutInSec>5</TimeoutInSec>
          </ExpirySettings>
          <!-- Get the token to cache from the variable where the ExtensionCallout put it. -->
          <Source>cloud.translation.auth.token</Source>
      </PopulateCache>
    

작업

<ph type="x-smartling-placeholder">

getOauth2AccessToken

OAuth 2.0 액세스 토큰을 가져옵니다. Google API에 OAuth 토큰이 필요할 때 API 프록시와 Google API 간에 two-legged OAuth를 지원하려면 이 작업을 사용하세요.

two-legged OAuth에서 이 확장 프로그램 작업은 서비스 계정 JSON (이 확장 프로그램을 구성할 때 해당 JSON을 추가)을 사용하여 Google에 인증하여 OAuth 토큰을 가져옵니다. 이 작업이 OAuth 토큰을 가져오면 API 프록시는 토큰을 사용하여 Google API를 호출할 수 있으며, Google 서비스 계정 대신 API를 효과적으로 호출할 수 있습니다.

Google Cloud API에 대한 액세스는 Google API의 OAuth 2.0 범위에 나열된 범위를 통해 필터링됩니다.

OAuth 2.0을 통한 서버 간 상호작용에 대한 자세한 내용은 서버 간 애플리케이션에서 OAuth 2.0 사용하기를 참조하세요.

구문

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
    "scope2"
  ]
}]]></Input>

다음 예에서 확장 프로그램의 getOauth2AccessToken 작업은 Cloud Translation API에 대한 요청에 사용할 토큰을 검색합니다.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-translation"
  ]
}]]></Input>

요청 매개변수

매개변수 설명 유형 기본값 필수
범위 OAuth 2.0 범위의 배열입니다. 범위에 대한 자세한 내용은 Google API의 OAuth 2.0 범위를 참고하세요. 배열 ["https://www.googleapis.com/auth/cloud-platform"]: 서비스 계정이 액세스 권한을 보유한 모든 API에 대한 액세스 권한을 부여합니다. 아니요.

응답

다음과 같은 형식의 액세스 토큰, 유형, 만료일이 포함된 객체입니다.

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

응답 속성

매개변수 설명 기본값 필수
accessToken OAuth 2.0 액세스 토큰입니다. 없음
tokenType 토큰 유형입니다. 베어러(Bearer)
expiresInSec 토큰이 만료될 때까지의 시간(초)입니다. 3600

getJWTAccessToken

JSON 웹 토큰 (JWT) 액세스 토큰을 가져옵니다. 호출하려는 API에 Google API GitHub 저장소에 게시된 서비스 정의가 있는 경우 이 토큰을 사용하여 Google API에 인증할 수 있습니다.

일부 Google API에서는 OAuth 2.0 액세스 토큰이 아닌 서명된 JWT를 Bearer 토큰으로 직접 사용하여 승인된 API 호출을 수행할 수 있습니다. 이 경우 API를 호출하기 전에 Google 인증 서버에 네트워크 요청을 하지 않아도 됩니다.

JWT 액세스 토큰으로 인증하는 방법에 대한 자세한 내용은 서버 간 애플리케이션에서 OAuth 2.0 사용하기를 참조하세요.

구문

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

예: Cloud 함수 URL

다음 예에서 확장 프로그램의 getOauth2AccessToken 작업은 Cloud Translation API에 대한 요청에 사용할 토큰을 검색합니다.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>

예: Cloud IAP 보안 클라이언트 ID

다음 예에서 확장 프로그램의 getOauth2AccessToken 작업은 Cloud Translation API에 대한 요청에 사용할 토큰을 검색합니다.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

요청 매개변수

매개변수 설명 기본값 필수
audience 의도된 토큰 수신자입니다. 여기에는 Cloud IAP 보안 클라이언트 ID, Cloud Functions URL 등이 포함될 수 있습니다. 없음

응답

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

응답 속성

매개변수 설명 기본값 필수
accessToken 액세스 토큰입니다. 없음
tokenType 토큰 유형입니다. 베어러(Bearer)
expiresInSec 몇 초 후에 만료됩니다. 3600

구성 참조

API 프록시에서 사용하기 위해 이 확장 프로그램을 구성하고 배포할 때 다음을 사용하세요. Apigee 콘솔을 사용하여 확장 프로그램을 구성하는 단계는 확장 프로그램 추가 및 구성을 참조하세요.

일반적인 확장 속성

모든 확장 프로그램에는 다음과 같은 속성이 있습니다.

속성 설명 기본 필수
name 확장 프로그램의 구성에 지정할 이름입니다. 없음 지원됨
packageName Apigee Edge에서 제공하는 확장 프로그램 패키지 이름입니다. 없음 지원됨
version 확장 프로그램을 구성하는 확장 프로그램 패키지의 버전 번호입니다. 없음 지원됨
configuration 추가하는 확장 프로그램 관련 구성 값입니다. 이 확장 프로그램 속성의 속성을 참조하세요. 없음 지원됨

이 확장 프로그램의 속성

이 확장 프로그램과 관련된 다음 구성 속성의 값을 지정합니다.

속성 설명 기본값 필수
사용자 인증 정보 Apigee Edge 콘솔에 입력하면 서비스 계정 키 JSON 파일의 전체 내용이 입력됩니다. 관리 API를 통해 전송되면 전체 서비스 계정 키 JSON 파일에서 base64로 인코딩된 값입니다. 없음