Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X. Thông tin
Phiên bản: 2.0.2
Xác thực bằng Google để truy cập vào các API Google mà bạn chỉ định.
Sử dụng tiện ích này để lấy mã thông báo (OAuth hoặc JWT) cho các dịch vụ của Google Cloud, sau đó sử dụng mã thông báo này cho các lệnh gọi tiếp theo đến Google API, chẳng hạn như bằng cách sử dụng chính sách ServiceCallout.
Ví dụ: trong một proxy API, bạn có thể nhận được mã thông báo bằng tiện ích này, lưu mã thông báo vào bộ nhớ đệm bằng chính sách PopulateCache, sau đó truyền mã thông báo bằng chính sách ServiceCallout để truy cập vào các dịch vụ của Google Cloud trong một quy trình proxy API.
Điều kiện tiên quyết
Nội dung này cung cấp thông tin tham khảo để định cấu hình và sử dụng tiện ích này. Trước khi sử dụng tiện ích từ một proxy API bằng chính sách ExtensionCallout, bạn phải:
Đảm bảo rằng tài khoản mà tiện ích sẽ sử dụng (tài khoản do tài khoản dịch vụ mà bạn sẽ dùng cho thông tin đăng nhập đại diện) có quyền truy cập vào các dịch vụ của Google Cloud mà tiện ích sẽ xác thực.
Sử dụng Google Cloud Console để tạo khoá cho tài khoản dịch vụ.
Sử dụng nội dung của tệp JSON khoá tài khoản dịch vụ thu được khi thêm và định cấu hình tiện ích bằng cách sử dụng tài liệu tham khảo về cấu hình.
Giới thiệu về việc xác thực bằng Google Cloud
Tiện ích này yêu cầu xác thực từ Google Cloud bằng cách đại diện cho một thành viên cụ thể được xác định trong dự án Google Cloud của bạn. Bạn sử dụng tệp JSON của tài khoản dịch vụ của thành viên dự án đó khi định cấu hình tiện ích này.
Do đó, tiện ích này sẽ chỉ có quyền truy cập vào những tài nguyên mà thành viên đó có quyền. Nói cách khác, việc xác thực thành công bằng tiện ích này phụ thuộc vào sự trùng khớp giữa các quyền được cấp trong Google Cloud Console và quyền truy cập mà tiện ích yêu cầu (thông qua phạm vi hoặc đối tượng) trong thời gian chạy.
Thông thường, các bước xác thực để truy cập vào API từ tiện ích này sẽ như sau:
Đảm bảo rằng tài khoản dịch vụ thành viên mà tiện ích này đại diện có quyền truy cập vào tài nguyên Google mà bạn muốn truy cập. Bạn có thể sử dụng trang Quản lý danh tính và quyền truy cập trên đám mây (Cloud IAM) trong Google Cloud Console để cấp vai trò cho thành viên dự án mà tiện ích này đại diện.
Sử dụng JSON khoá tài khoản dịch vụ của thành viên đó khi định cấu hình tiện ích này.
Khi định cấu hình chính sách ExtensionCallout để sử dụng tiện ích này, hãy chỉ yêu cầu xác thực cho những tài nguyên mà thành viên dự án của bạn có quyền truy cập.
Mẫu
Các ví dụ sau minh hoạ cách xác thực bằng Google Cloud bằng cách sử dụng chính sách ExtensionCallout.
Lấy mã truy cập
Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích sẽ truy xuất một mã thông báo để sử dụng trong các yêu cầu gửi đến 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>
Giá trị phản hồi sẽ có dạng như sau:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Chính sách AssignMessage sau đây sẽ truy xuất giá trị phản hồi từ chính sách ExtensionCallout và sao chép giá trị đó vào tải trọng phản hồi. Điều này có thể hữu ích khi gỡ lỗi. Trong thực tế, bạn có thể không muốn trả lại mã thông báo cho ứng dụng.
<?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>
Lưu mã truy cập vào bộ nhớ đệm
Để tránh thực hiện các lệnh gọi không cần thiết để truy xuất mã thông báo, hãy cân nhắc việc lưu mã thông báo mà bạn nhận được vào bộ nhớ đệm. Đối với các lệnh gọi tiếp theo yêu cầu mã thông báo, việc truy xuất mã thông báo từ bộ nhớ đệm Apigee Edge sẽ nhanh hơn so với việc lấy mã thông báo mới. Khi mã thông báo được lưu vào bộ nhớ đệm hết hạn, hãy truy xuất mã thông báo mới và làm mới bộ nhớ đệm bằng mã thông báo đó.
Đoạn mã sau đây trong một proxy API mẫu minh hoạ cách thiết lập và sử dụng mã thông báo được lưu vào bộ nhớ đệm để gọi Google Translation API bằng chính sách ServiceCallout. Mỗi ví dụ về mã ở đây là cho một chính sách khác nhau trong quy trình.
Các chính sách sau đây được thực thi theo trình tự được mô tả bằng XML luồng sau đây:
<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>
Chính sách LookupCache sau đây sẽ cố gắng lấy mã thông báo từ bộ nhớ đệm. Nếu mã thông báo đã được lấy và lưu vào bộ nhớ đệm, thì chính sách này sẽ lấy mã thông báo đó để sử dụng bằng proxy 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>Nếu quá trình tra cứu bộ nhớ đệm không truy xuất được mã thông báo đã lưu vào bộ nhớ đệm, thì chính sách ExtensionCallout sau đây sẽ truy xuất một mã thông báo OAuth mới, chỉ định Google Cloud Translation API làm phạm vi cho mã thông báo. Google Cloud sẽ trả về một mã thông báo hợp lệ nếu thông tin xác thực tài khoản dịch vụ được dùng khi định cấu hình tiện ích
Google-Auth-Calloutđại diện cho một thành viên dự án có quyền truy cập vào API.<?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>Sau khi chính sách ExtensionCallout truy xuất một mã thông báo mới, chính sách PopulateCache sẽ lưu mã thông báo đó vào bộ nhớ đệm để các chính sách trong proxy API sử dụng sau này.
<?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>
Thao tác
getOauth2AccessToken
Lấy mã truy cập OAuth 2.0. Sử dụng thao tác này để hỗ trợ OAuth hai bước giữa API proxy và Google API khi Google API yêu cầu mã thông báo OAuth.
Trong OAuth hai chân, thao tác mở rộng này truy xuất mã thông báo OAuth bằng cách xác thực với Google bằng JSON tài khoản dịch vụ (bạn thêm JSON đó khi định cấu hình tiện ích này). Sau khi thao tác này truy xuất mã thông báo OAuth, proxy API của bạn có thể sử dụng mã thông báo này để thực hiện lệnh gọi đến các API của Google, tức là gọi các API thay cho tài khoản dịch vụ của Google.
Quyền truy cập vào các API của Google Cloud được lọc thông qua các phạm vi được liệt kê trong phạm vi OAuth 2.0 cho các API của Google.
Để biết thêm thông tin về các hoạt động tương tác giữa các máy chủ bằng OAuth 2.0, hãy xem bài viết Sử dụng OAuth 2.0 cho ứng dụng từ máy chủ đến máy chủ
Cú pháp
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Ví dụ:
Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích sẽ truy xuất một mã thông báo để sử dụng trong các yêu cầu gửi đến Cloud Translation API.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Tham số yêu cầu
| Tham số | Mô tả | Loại | Mặc định | Bắt buộc |
|---|---|---|---|---|
| phạm vi | Một mảng gồm các phạm vi OAuth 2.0. Để biết thêm thông tin về phạm vi, hãy xem phạm vi OAuth 2.0 cho các API của Google. | Mảng | ["https://www.googleapis.com/auth/cloud-platform"], cấp quyền truy cập vào tất cả các API mà tài khoản dịch vụ có quyền truy cập. |
STT |
Phản hồi
Một đối tượng chứa mã truy cập, loại mã truy cập và ngày hết hạn của mã truy cập ở dạng sau:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Thuộc tính phản hồi
| Tham số | Mô tả | Mặc định | Bắt buộc |
|---|---|---|---|
| accessToken | Mã truy cập OAuth 2.0. | Không có | Có |
| tokenType | Loại mã thông báo. | Sóng mang | Có |
| expiresInSec | Số giây cho đến khi mã thông báo hết hạn. | 3600 | Có |
getJWTAccessToken
Nhận mã thông báo truy cập mã thông báo web JSON (JWT). Bạn có thể dùng mã thông báo này để xác thực bằng API của Google nếu API mà bạn muốn gọi có một định nghĩa dịch vụ được xuất bản trong kho lưu trữ API của Google trên GitHub.
Với một số API của Google, bạn có thể thực hiện các lệnh gọi API được uỷ quyền bằng cách sử dụng trực tiếp JWT đã ký làm mã thông báo của người mang thay vì mã thông báo truy cập OAuth 2.0. Khi có thể, bạn có thể tránh phải gửi yêu cầu mạng đến máy chủ uỷ quyền của Google trước khi thực hiện lệnh gọi API.
Để biết thêm thông tin về cách xác thực bằng mã truy cập JWT, hãy xem bài viết Sử dụng OAuth 2.0 cho ứng dụng từ máy chủ đến máy chủ.
Cú pháp
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Ví dụ: URL của Cloud Functions
Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích sẽ truy xuất một mã thông báo để sử dụng trong các yêu cầu gửi đến Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Ví dụ: Mã ứng dụng được bảo mật bằng IAP trên đám mây
Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích sẽ truy xuất một mã thông báo để sử dụng trong các yêu cầu gửi đến Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Tham số yêu cầu
| Tham số | Mô tả | Mặc định | Bắt buộc |
|---|---|---|---|
| audience | Người nhận dự kiến của mã thông báo. Điều này có thể bao gồm mã ứng dụng được bảo mật bằng Cloud IAP, URL của Cloud Functions | Không có | Có |
Phản hồi
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Thuộc tính phản hồi
| Tham số | Mô tả | Mặc định | Bắt buộc |
|---|---|---|---|
| accessToken | Mã truy cập. | Không có | Có |
| tokenType | Loại mã thông báo. | Sóng mang | Có |
| expiresInSec | Thời gian hết hạn tính bằng giây. | 3600 | Có |
Thông tin tham khảo về cấu hình
Hãy sử dụng những thông tin sau khi bạn định cấu hình và triển khai tiện ích này để sử dụng trong các proxy API. Để biết các bước định cấu hình một tiện ích bằng bảng điều khiển Apigee, hãy xem phần Thêm và định cấu hình tiện ích.
Thuộc tính mở rộng chung
Các thuộc tính sau có sẵn cho mỗi tiện ích.
| Tài sản | Mô tả | Mặc định | Bắt buộc |
|---|---|---|---|
name |
Tên mà bạn đang đặt cho cấu hình của tiện ích này. | Không có | Có |
packageName |
Tên của gói tiện ích do Apigee Edge cung cấp. | Không có | Có |
version |
Số phiên bản của gói tiện ích mà bạn đang định cấu hình tiện ích. | Không có | Có |
configuration |
Giá trị cấu hình cụ thể cho tiện ích bạn đang thêm. Xem Thuộc tính cho gói tiện ích này | Không có | Có |
Các thuộc tính cho gói tiện ích này
Chỉ định các giá trị cho các thuộc tính cấu hình sau đây dành riêng cho tiện ích này.
| Thuộc tính | Mô tả | Mặc định | Bắt buộc |
|---|---|---|---|
| thông tin xác thực | Khi được nhập vào bảng điều khiển Apigee Edge, đây là toàn bộ nội dung của tệp JSON khoá tài khoản dịch vụ. Khi được gửi bằng API quản lý, đây là một giá trị được mã hoá base64 được tạo từ toàn bộ tệp JSON khoá tài khoản dịch vụ. | Không có | Có |