Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요. info
버전: 2.0.2
지정한 Google API에 액세스하기 위해 Google로 인증합니다.
이 확장 프로그램을 사용하여 Google Cloud 서비스의 토큰 (OAuth 또는 JWT)을 획득한 다음 ServiceCallout 정책을 사용하는 등 Google API에 대한 후속 호출에 토큰을 사용합니다.
예를 들어 API 프록시에서 이 확장 프로그램으로 토큰을 가져오고, PopulateCache 정책을 사용하여 토큰을 캐시한 다음, ServiceCallout 정책을 사용하여 토큰을 전달하여 API 프록시 흐름 내에서 Google Cloud 서비스에 액세스할 수 있습니다.
기본 요건
이 콘텐츠는 이 확장 프로그램을 구성하고 사용하는 데 필요한 참조를 제공합니다. ExtensionCallout 정책을 사용하여 API 프록시에서 확장 프로그램을 사용하려면 다음을 충족해야 합니다.
확장 프로그램에서 사용할 계정(사용자 인증 정보에 사용할 서비스 계정으로 표시되는 계정)에 확장 프로그램이 인증할 Google Cloud 서비스에 대한 액세스 권한이 있는지 확인합니다.
구성 참조를 사용하여 확장 프로그램을 추가 및 구성할 때 결과 서비스 계정 키 JSON 파일의 콘텐츠를 사용합니다.
Google Cloud로 인증 정보
이 확장 프로그램은 Google Cloud 프로젝트에 정의된 특정 구성원을 나타내어 Google Cloud의 인증을 요청합니다. 이 확장 프로그램을 구성할 때 해당 프로젝트 구성원의 서비스 계정 JSON 파일을 사용합니다.
따라서 이 확장 프로그램은 해당 구성원에게 권한이 있는 리소스에만 액세스할 수 있습니다. 즉, 이 확장 프로그램의 인증 성공 여부는 Google Cloud 콘솔에서 부여된 권한과 런타임에 확장 프로그램에서 요청한 액세스 (범위 또는 잠재고객을 통해) 간의 일치 여부에 따라 달라집니다.
일반적으로 이 확장 프로그램에서 API에 액세스하기 위한 인증 단계는 다음과 같습니다.
이 확장 프로그램이 나타내는 구성원 서비스 계정에 액세스하려는 Google 리소스에 대한 액세스 권한이 있는지 확인합니다. Google Cloud 콘솔의 Cloud Identity and Access Management (Cloud IAM) 페이지를 사용하여 이 확장 프로그램이 나타내는 프로젝트 구성원에게 역할을 부여할 수 있습니다.
이 확장 프로그램을 구성할 때 해당 구성원의 서비스 계정 키 JSON을 사용합니다.
이 확장 프로그램을 사용하도록 ExtensionCallout 정책을 구성할 때는 프로젝트 구성원이 액세스할 수 있는 리소스에 대해서만 인증을 요청하세요.
샘플
다음 예시에서는 ExtensionCallout 정책을 사용하여 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 정책은 ExtensionCallout 정책에서 응답 값을 가져와 응답 페이로드에 복사합니다. 이는 디버깅에 유용할 수 있습니다. 실제로는 토큰을 클라이언트에 반환하지 않는 것이 좋습니다.
<?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>
다음 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>캐시 조회에서 캐시된 토큰을 가져오지 않으면 다음 ExtensionCallout 정책이 새 OAuth 토큰을 가져와 토큰의 범위로 Google Cloud Translation API를 지정합니다.
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>ExtensionCallout 정책이 새 토큰을 가져온 후 PopulateCache 정책은 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>
작업
getOauth2AccessToken
OAuth 2.0 액세스 토큰을 가져옵니다. Google API에 OAuth 토큰이 필요한 경우 이 작업을 사용하여 API 프록시와 Google API 간의 2단계 OAuth를 지원합니다.
2단계 OAuth에서 이 확장 프로그램 작업은 서비스 계정 JSON을 사용하여 Google로 인증하여 OAuth 토큰을 가져옵니다 (이 확장 프로그램을 구성할 때 JSON을 추가함). 이 작업에서 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 인코딩 값입니다. | 없음 | 예 |