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.3.1

Xác thực với Google để truy cập vào các API của Google mà bạn chỉ định.

Hãy 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ụ Google Cloud, sau đó sử dụng mã thông báo 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 Chú thích dịch vụ.

Ví dụ: trong một proxy API, bạn có thể nhận được một 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 PopulateCache policy, sau đó chuyển mã thông báo qua chính sách ServiceChú thích để truy cập các dịch vụ của Google Cloud từ trong một 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 từ proxy API bằng Chính sách 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 để xác thực 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ẽ dùng để 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ề 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 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 các tài nguyên mà thành viên có quyền truy cập. 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.

Nhìn chung, bạn cần thực hiện các bước xác thực quyền truy cập vào API từ tiện ích này 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 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 (IAM) của Cloud trong Google Cloud Console để cấp vai trò cho thành viên 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 chú thích tiện ích để 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ủa bạ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 chú thích phần mở rộng.

Lấy mã truy cập

Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích truy xuất mã thông báo để sử dụng trong các yêu cầu tới 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áchassignMessage sau đây truy xuất giá trị phản hồi từ chính sách ExtensionChú thích ở 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ế, có thể bạn không muốn trả về mã thông báo cho ứng dụng 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 để truy xuất mã thông báo, hãy cân nhắ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 phụ yêu cầu 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ã 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 rồi 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 Google Translation API 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 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 quy trình 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>
  1. Chính sách LookupCache sau đây 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, chính sách này sẽ lấy mã để 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 ExtensionAnnotation sau đây sẽ truy xuấ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 đă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 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 ExtensionChú thích truy xuất mã thông báo mới, chính sách PopulateCache sẽ lưu mã này vào bộ nhớ đệm để các chính sách sử dụng sau này trong proxy 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>
    

Thao tác

getOauth2AccessToken

Lấy 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 của bạn và API Google khi API của 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 truy xuất mã thông báo OAuth bằng cách xác thực với Google sử dụ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 API Google, thay mặt cho tài khoản dịch vụ của Google gọi API một cách hiệu quả.

Quyền truy cập vào API Google Cloud đượ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ề các tương tác từ máy chủ đến 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, thao tác getOauth2AccessToken của tiện ích truy xuất mã thông báo để sử dụng trong các yêu cầu tới Cloud Translation API.

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

Thông số yêu cầu

Thông số Nội dung mô tả Loại Mặc định Bắt buộc
xác định phạm vi của thứ nguyên. Một mảng phạm vi OAuth 2.0. Để biết thêm về phạm vi, hãy xem bài viết Các phạm vi OAuth 2.0 dành cho API 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. Không.

Phản hồi

Một đối tượng có chứa mã truy cập, loại và ngày hết hạn của mã ở dạng sau:

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

Thuộc tính phản hồi

Thông số Nội dung 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ể sử 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ữ API Google trên GitHub.

Với một số API của Google, bạn có thể thực hiện 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 truy cập, thay vì mã truy cập OAuth 2.0. Khi có thể thực hiện việc này, 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 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 chức năng đám mây

Trong ví dụ sau, thao tác getOauth2AccessToken của tiện ích truy xuất mã thông báo để sử dụng trong các yêu cầu tới 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 với IAP trên Cloud

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

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

Thông số yêu cầu

Thông số Nội dung mô tả Mặc định Bắt buộc
đối tượng Người nhận mã thông báo dự kiến. Thông tin này có thể bao gồm mã ứng dụng khách được bảo mật trên Cloud IAP, URL 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ố Nội dung 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 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 các đoạn mã 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 bài viết Thêm và định cấu hình tiện ích.

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 cho 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.

Tài sản Nội dung 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ý, giá trị này 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ó