Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Phiên bản: 2.0.0
Xác thực bằng Google để truy cập vào các API của 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 đó cho các lệnh gọi tiếp theo đến API của Google, 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 qua chính sách ServiceCallout để truy cập vào các dịch vụ của Google Cloud từ trong luồng 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 được biểu thị bằng tài khoản dịch vụ mà bạn sẽ sử dụng cho thông tin xác thực) có quyền truy cập vào các dịch vụ 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 tệp tham chiếu cấu hình.
Giới thiệu về cách 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 việc 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.
Nhìn chung, 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 của 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 các 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 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ã thông báo để sử dụng trong các yêu cầu gửi đến API Dịch trên đám mây.
<?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 truy xuất giá trị phản hồi từ chính sách ExtensionCallout ở trên 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ả về 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 nhằm truy xuất mã thông báo, hãy cân nhắc lưu mã thông báo 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 nhận mã thông báo mới. Khi mã thông báo đã 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 đó.
Mã sau đây từ 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 API Dịch của Google bằng chính sách ServiceCallout. Mỗi ví dụ về mã ở đây là dành cho một chính sách khác nhau trong luồng.
Các chính sách sau đây được thực thi theo trình tự được mô tả trong XML luồng sau:
<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 đó để proxy API sử dụng.
<?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 lượt tra cứu bộ nhớ đệm không truy xuất mã thông báo được lưu vào bộ nhớ đệm, thì chính sách ExtensionCallout sau đây sẽ truy xuất mã thông báo OAuth mới, chỉ định API Dịch của Google Cloud 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ên giữa proxy API và API của Google khi API của Google yêu cầu mã thông báo OAuth.
Trong OAuth hai bước, thao tác của tiện ích này sẽ 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 đó để thực hiện lệnh gọi đến các API của Google, thay mặt tài khoản dịch vụ của Google gọi các API một cách hiệu quả.
Quyền truy cập vào các API của Google Cloud được lọc qua các phạm vi được liệt kê trong phần Phạm vi OAuth 2.0 cho các API của Google.
Để biết thêm về các hoạt động tương tác giữa máy chủ với 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ã thông báo để sử dụng trong các yêu cầu gửi đến API Dịch trên đám mây.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Tham số yêu cầu
Thông số | Mô tả | Loại | Mặc định | Bắt buộc |
---|---|---|---|---|
phạm vi | Một mảng các phạm vi OAuth 2.0. Để biết thêm thông tin về phạm vi, hãy xem bài viết 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ã thông báo truy cập, loại mã thông báo và ngày hết hạn của mã thông báo ở dạng sau:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Thuộc tính phản hồi
Thông 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
Lấy mã thông báo truy cập JSON Web Token (JWT). Bạn có thể sử 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ó định nghĩa dịch vụ được xuất bản trong kho lưu trữ GitHub của API của Google.
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 JWT đã ký trực tiếp làm mã thông báo xác thực, 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 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 Hàm trên đám mây
Trong ví dụ sau, thao tác getOauth2AccessToken
của tiện ích sẽ truy xuất mã thông báo để sử dụng trong các yêu cầu gửi đến API Dịch trên đám mây.
<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 Cloud IAP
Trong ví dụ sau, thao tác getOauth2AccessToken
của tiện ích sẽ truy xuất mã thông báo để sử dụng trong các yêu cầu gửi đến API Dịch trên đám mây.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Tham số yêu cầu
Thông 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. Mã 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, v.v. | Không có | Có |
Phản hồi
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Thuộc tính phản hồi
Thông 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ó |
Tài liệu tham khảo về cấu hình
Hãy sử dụng nội dung sau đây khi bạn định cấu hình và triển khai tiện ích này để sử dụng trong proxy API. Để biết các bước định cấu hình 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.
Các thuộc tính mở rộng phổ biến
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ó |
Thuộc tính cho gói tiện ích này
Chỉ định 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 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 qua 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ó |