Tiện ích xác thực của Google

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: 1.0.2

Xác thực với 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 này cho các lệnh gọi tiếp theo đến API Google, chẳng hạn như bằng cách sử dụng chính sách ServiceAnnotation.

Ví dụ: trong proxy API, bạn có thể nhận mã thông báo có tiện ích này, hãy lưu mã thông báo đó vào bộ nhớ đệm bằng cách sử dụng chính sách AutofillCache, sau đó chuyển mã thông báo thông qua chính sách ServiceAnnotation để truy cập vào các dịch vụ của Google Cloud từ trong quy trình proxy API.

Điều kiện tiên quyết

Nội dung này cung cấp tài liệu 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 của một proxy API bằng chính sách ExtensionAnnotation (Chú thích tiện ích), bạn phải:

  1. Đảm bảo rằng tài khoản mà tiện ích sẽ sử dụng (tài khoản được đại diện bằng tài khoản dịch vụ mà bạn sẽ dùng làm thông tin đăng nhập) 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.

  2. Sử dụng Google Cloud Console để tạo khoá cho tài khoản dịch vụ.

  3. Sử dụng nội dung của tệp JSON chứa 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ề tính năng xác thực bằng Google Cloud

Tiện ích này yêu cầu Google Cloud xác thực 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. Bạn sử dụng tệp JSON trong 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 truy cập. Nói cách khác, việc tiện ích này xác thực thành công hay không 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 để xác thực quyền truy cập vào API từ tiện ích này sẽ như sau:

  1. Đảm bảo rằng tài khoản dịch vụ thành viên mà tiện ích này đang đại diện có quyền truy cập vào tài nguyên trê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 (Cloud IAM) của Cloud trong Google Cloud Console để cấp vai trò cho thành viên của dự án mà tiện ích này đại diện.

  2. Hãy sử dụng khoá tài khoản dịch vụ JSON của thành viên đó khi định cấu hình tiện ích này.

  3. Khi định cấu hình chính sách Tiện ích mở rộng để sử dụng tiện ích nà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ó quyền truy cập.

Mẫu

Các ví dụ sau minh hoạ cách xác thực với Google Cloud bằng chính sách ExtensionAnnotation.

Lấy mã truy cập

Trong ví dụ sau, hành động getOauth2AccessToken của tiện ích truy xuất một mã thông báo để sử dụng trong các yêu cầu đế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 chỉ định sau đây truy xuất giá trị phản hồi từ chính sách Phần mở rộng về chú thích ở trên và sao chép giá trị đó trong tải trọng phản hồi. Thao tác này có thể hữu ích khi gỡ lỗi. Trong thực tế, có thể bạn sẽ không muốn trả về mã thông báo cho máy khách.

<?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 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 cuộc gọi trước đó cần có mã thông báo, việc truy xuất mã thông báo từ bộ nhớ đệm của Apigee Edge sẽ nhanh hơn so với việc nhận mã 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ột mã thông báo mới rồi dùng mã đó làm mới bộ nhớ đệm.

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 đã lưu vào bộ nhớ đệm để gọi API Google Translation bằng chính sách ServiceCallout. Mỗi mã ví dụ ở đây là dành cho một chính sách khác trong quy trình.

Các chính sách sau được thực thi theo trình tự được mô tả bằng 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>
  1. Chính sách LookupCache sau đây sẽ tìm cách 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>
    
  2. Nếu quá trình tra cứu bộ nhớ đệm không truy xuất mã thông báo đã lưu vào bộ nhớ đệm, thì chính sách Extensions dưới đâ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 của mã thông báo. Google Cloud sẽ trả về mã thông báo hợp lệ nếu thông tin đăng nhập 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 của 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>
    
  3. Sau khi chính sách ExtensionAnnotation đã truy xuất một mã thông báo mới, chính sách điền sẵn vào bộ nhớ đệm sẽ lưu 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

Nhận mã truy cập OAuth 2.0. Sử dụng thao tác này để hỗ trợ OAuth cấp quyền truy cập giữa proxy API và API Google khi API Google yêu cầu mã thông báo OAuth.

Trong OAuth cấp quyền truy cập, thao tác 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 tài khoản dịch vụ JSON (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ể dùng mã thông báo đó để thực hiện lệnh gọi đến Google API, thay mặt tài khoản dịch vụ của Google gọi một cách hiệu quả các API đó.

Quyền truy cập vào Google Cloud API được lọc thông qua các phạm vi được liệt kê trong các phạm vi OAuth 2.0 dành cho API Google.

Để biết thêm về hoạt động tương tác giữa máy chủ với máy chủ với OAuth 2.0, hãy xem phần 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, hành động getOauth2AccessToken của tiện ích truy xuất một mã thông báo để sử dụng trong các yêu cầu đến Cloud Translation API.

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

Yêu cầu thông số

Thông số Mô tả Loại Mặc định Bắt buộc
phạm vi Một mảng phạm vi OAuth 2.0. Để biết thêm thông tin về phạm vi, vui lòng xem bài viết Các phạm vi của OAuth 2.0 cho API Google. Mảng ["https://www.googleapis.com/auth/cloud-platform"], cấp quyền truy cập vào tất 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 và ngày hết hạn của mã theo biểu mẫu 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ó
tokenType Loại mã thông báo. Sóng mang
expiresInSec Số giây cho đến khi mã thông báo hết hạn. 3600

getJWTAccessToken

Lấy mã 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 với các API của Google nếu API bạn muốn gọi có định nghĩa dịch vụ được xuất bản trong kho lưu trữ GitHub về 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 dưới dạng mã thông báo mang thay vì mã truy cập OAuth 2.0. Khi khả thi, 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 phần 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 hàm đám mây

Trong ví dụ sau, hành động getOauth2AccessToken của tiện ích truy xuất một mã thông báo để sử dụng trong các yêu cầu đế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 khách được bảo mật của Cloud IAP

Trong ví dụ sau, hành động getOauth2AccessToken của tiện ích truy xuất một mã thông báo để sử dụng trong các yêu cầu đến Cloud Translation API.

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

Yêu cầu thông số

Thông số Mô tả Mặc định Bắt buộc
audience Người nhận mã thông báo dự kiến. Dữ liệu này có thể bao gồm mã ứng dụng khách được bảo mật của Cloud IAP, URL của Cloud Functions, v.v. Không 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ó
tokenType Loại mã thông báo. Sóng mang
expiresInSec Sẽ hết hạn sau vài giây. 3600

Tài liệu tham khảo về cấu hình

Sử dụng mã sau 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 một tiện ích bằng bảng điều khiển Apigee, hãy xem bài viết Thêm và định cấu hình tiện ích.

Các thuộc tính tiện ích 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ó
packageName Tên của gói tiện ích do Apigee Edge cung cấp. Không 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ó
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 thuộc tính của gói tiện ích này

Chỉ định giá trị cho các thuộc tính cấu hình sau 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 chứa khoá tài khoản dịch vụ của bạn. Khi được gửi qua API quản lý, đó là một giá trị được mã hoá base64 được tạo từ toàn bộ tệp JSON chứa khoá tài khoản dịch vụ. Không có