Thu hồi chính sách OAuth V2

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

biểu tượng chính sách

Tổng quan

Thu hồi mã truy cập OAuth2 được liên kết với mã ứng dụng nhà phát triển hoặc mã người dùng cuối của ứng dụng, hoặc cả hai.

Sử dụng chính sách OAuthv2 để tạo mã truy cập OAuth 2.0. Mã thông báo do Apigee tạo có định dạng như sau:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

Phần tử application_name chứa mã nhận dạng ứng dụng của nhà phát triển được liên kết với mã thông báo.

Theo mặc định, Apigee không đưa mã nhận dạng người dùng cuối vào mã thông báo. Bạn có thể định cấu hình Apigee để thêm mã nhận dạng người dùng cuối bằng cách thêm phần tử <AppEndUser> vào chính sách OAuthv2:

<OAuthV2 name="GenerateAccessTokenClient">
    <Operation>GenerateAccessTokenV/Operation>
    ...
    <AppEndUser>request.queryparam.app_enduser</AppEndUser>
</OAuthV2>

Trong ví dụ này, hãy truyền mã nhận dạng người dùng cuối đến chính sách OAuthv2 trong một tham số truy vấn có tên là app_enduser. Sau đó, mã nhận dạng người dùng cuối sẽ được đưa vào mã thông báo trong phần tử app_enduser:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Thu hồi theo mã ứng dụng của nhà phát triển

Thu hồi mã thông báo truy cập OAuth2 được liên kết với mã ứng dụng dành cho nhà phát triển. Tất cả mã truy cập OAuth2 do Apigee tạo đều có mã nhận dạng của ứng dụng nhà phát triển được liên kết với mã thông báo. Sau đó, bạn có thể thu hồi mã thông báo dựa trên mã ứng dụng đó.

  • Sử dụng Developer apps API để lấy danh sách mã ứng dụng của một nhà phát triển cụ thể.

  • Bạn cũng có thể sử dụng Developer apps API để biết thông tin chi tiết về một ứng dụng.

Thu hồi theo mã nhận dạng người dùng cuối của ứng dụng

Thu hồi mã thông báo truy cập OAuth2 được liên kết với mã nhận dạng của một người dùng cuối cụ thể của ứng dụng. Đây là mã thông báo được liên kết với mã nhận dạng của người dùng mà mã thông báo được cấp.

Theo mặc định, không có trường nào cho mã nhận dạng người dùng cuối trong mã truy cập OAuth. Để cho phép thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối, bạn phải định cấu hình chính sách OAuthv2 để đưa mã nhận dạng người dùng vào mã thông báo, như minh hoạ ở trên.

Để lấy mã nhận dạng người dùng cuối của ứng dụng, hãy sử dụng Developer apps API.

Mẫu

Các mẫu sau đây sử dụng chính sách Thu hồi OAuth phiên bản 2 để thu hồi mã truy cập OAuth2.

Mã ứng dụng dành cho nhà phát triển

Để thu hồi mã truy cập theo mã ứng dụng của nhà phát triển, hãy sử dụng phần tử <AppId> trong chính sách của bạn.

Ví dụ sau đây dự kiến sẽ tìm thấy mã ứng dụng của nhà phát triển trong mã truy cập trong một tham số truy vấn có tên là app_id:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
</RevokeOAuthV2>

Khi có mã nhận dạng của ứng dụng nhà phát triển, chính sách này sẽ thu hồi mã truy cập.

Thu hồi trước dấu thời gian

Để thu hồi mã truy cập theo mã ứng dụng của nhà phát triển được tạo trước một ngày và giờ cụ thể, hãy sử dụng phần tử <RevokeBeforeTimestamp> trong chính sách của bạn. <RevokeBeforeTimestamp> chỉ định thời gian bắt đầu của hệ thống theo giờ UTC tính bằng mili giây. Tất cả mã thông báo được phát hành trước thời điểm đó đều bị thu hồi.

Ví dụ sau đây thu hồi mã truy cập cho một ứng dụng nhà phát triển được tạo trước ngày 1 tháng 7 năm 2019:

<RevokeOAuthV2 continueOnError="false" enabled="true" name="MyRevokeTokenPolicy">
  <DisplayName>Revoke OAuth v2.0-1</DisplayName>
  <AppId ref="request.queryparam.app_id"></AppId>
  <RevokeBeforeTimestamp>1561939200000</RevokeBeforeTimestamp>
</RevokeOAuthV2>

Phần tử <RevokeBeforeTimestamp> lấy một số nguyên 64 bit (dài) biểu thị số mili giây đã trôi qua kể từ nửa đêm ngày 1 tháng 1 năm 1970 theo giờ UTC.


Tham chiếu phần tử

Tài liệu tham khảo về phần tử mô tả các phần tử và thuộc tính của chính sách RevokeOAuthV2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1">
  <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
  <AppId ref="variable"></AppId>
  <EndUserId ref="variable"></EndUserId>
  <RevokeBeforeTimestamp ref="variable"></RevokeBeforeTimestamp>
  <Cascade>false</Cascade>
</RevokeOAuthV2>

Thuộc tính <RevokeOAuthV2>

<RevokeOAuthV2 continueOnError="false" enabled="true" name="Revoke-OAuth-v20-1">

Bảng sau đây mô tả các thuộc tính chung cho tất cả các phần tử chính của chính sách:

Thuộc tính Mô tả Mặc định Tỷ lệ hiển thị
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, chữ số, dấu cách, dấu gạch ngang, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng một tên khác theo ngôn ngữ tự nhiên.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi một chính sách không thành công. Đây là hành vi dự kiến đối với hầu hết các chính sách.

Đặt thành true để quá trình thực thi luồng tiếp tục ngay cả sau khi một chính sách không thành công.

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi vẫn được đính kèm vào một quy trình.

true Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng một tên khác bằng ngôn ngữ tự nhiên.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name trong chính sách sẽ được sử dụng.

Tỷ lệ hiển thị Không bắt buộc
Loại Chuỗi

Phần tử <AppId>

Chỉ định mã nhận dạng ứng dụng của nhà phát triển đối với các mã thông báo cần thu hồi. Truyền một biến chứa mã ứng dụng hoặc mã ứng dụng theo nghĩa đen.

<AppId>appIdString</AppId>

or:

<AppId ref="request.queryparam.app_id"></AppId>
Mặc định

request.formparam.app_id (x-www-form-urlencoded và được chỉ định trong nội dung yêu cầu)

Tỷ lệ hiển thị

Không bắt buộc

Loại Chuỗi
Giá trị hợp lệ

Một biến luồng chứa chuỗi mã nhận dạng ứng dụng hoặc một chuỗi cố định.

Phần tử <Cascade>

Nếu true và bạn có mã truy cập truyền thống không minh bạch, thì cả mã làm mới và mã truy cập sẽ bị thu hồi nếu <AppId> hoặc <EndUserId> trùng khớp. Nếu false, chỉ mã truy cập bị thu hồi và mã làm mới không thay đổi. Hành vi tương tự chỉ áp dụng cho mã truy cập không công khai.

<Cascade>false<Cascade>
Mặc định

false

Tỷ lệ hiển thị

Không bắt buộc

Loại Boolean
Giá trị hợp lệ true hoặc false

Phần tử <EndUserId>

Chỉ định mã nhận dạng người dùng cuối ứng dụng của mã thông báo cần thu hồi. Truyền một biến chứa mã nhận dạng người dùng hoặc một chuỗi mã thông báo theo nghĩa đen.

<EndUserId>userIdString</EndUserId>

or:

<EndUserId ref="request.queryparam.access_token"></EndUserId>
Mặc định

request.formparam.enduser_id (x-www-form-urlencoded và được chỉ định trong nội dung yêu cầu)

Tỷ lệ hiển thị

Không bắt buộc

Loại Chuỗi
Giá trị hợp lệ

Một biến luồng chứa chuỗi mã nhận dạng người dùng hoặc một chuỗi ký tự.

Phần tử <RevokeBeforeTimestamp>

Thu hồi mã thông báo được phát hành trước dấu thời gian. Phần tử này hoạt động với <AppId><EndUserId> để cho phép bạn thu hồi mã thông báo trước một thời gian cụ thể. Giá trị mặc định là thời gian thực thi chính sách.

<RevokeBeforeTimestamp>timeStampString</RevokeBeforeTimestamp>

or:

<RevokeBeforeTimestamp ref="request.queryparam.revoke_since_timestamp"></RevokeBeforeTimestamp>
Mặc định

Dấu thời gian mà chính sách được thực thi.

Tỷ lệ hiển thị

Không bắt buộc

Loại Số nguyên 64 bit (dài) biểu thị số mili giây đã trôi qua kể từ nửa đêm ngày 1 tháng 1 năm 1970 theo giờ UTC.
Giá trị hợp lệ

Biến luồng chứa dấu thời gian hoặc dấu thời gian theo nghĩa đen. Dấu thời gian không được diễn ra trong tương lai và không được trước ngày 1 tháng 1 năm 2014.

Biến luồng

Chính sách RevokeOAuthV2 không đặt các biến luồng.

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge thiết lập khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem phần Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách thực thi. Tên lỗi xuất hiện bên dưới là các chuỗi được chỉ định cho biến fault.name khi xảy ra lỗi. Hãy xem phần Biến lỗi bên dưới để biết thêm thông tin chi tiết.

Mã lỗi Trạng thái HTTP Nguyên nhân
steps.oauth.v2.InvalidFutureTimestamp 500 Dấu thời gian không được ở trong tương lai.
steps.oauth.v2.InvalidEarlyTimestamp 500 Dấu thời gian không được sớm hơn ngày 1 tháng 1 năm 2014.
steps.oauth.v2.InvalidTimestamp 500 Dấu thời gian không hợp lệ.
steps.oauth.v2.EmptyAppAndEndUserId 500 Không được để trống cả AppdIdEndUserId.

Lỗi triển khai

Hãy tham khảo thông báo được báo cáo trong giao diện người dùng để biết thông tin về lỗi triển khai.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi trong thời gian chạy.

Biến Google AI Ultra for Business Ví dụ
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách đã gây ra lỗi. oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name là tên do người dùng chỉ định của chính sách đã gây ra lỗi. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name là tên do người dùng chỉ định của chính sách đã gây ra lỗi. oauthV2.GetTokenInfo.cause = ClientID is Invalid

Ví dụ về phản hồi lỗi

{
   "fault":{
      "faultstring":"Timestamp is in the future.",
      "detail":{
         "errorcode":"steps.oauth.v2.InvalidFutureTimestamp"
      }
   }
}

Ví dụ về quy tắc lỗi

<FaultRule name="RevokeOAuthV2 Faults">
    <Step>
        <Name>AM-InvalidTimestamp</Name>
    </Step>
    <Condition>(fault.name = "InvalidFutureTimestamp")</Condition>
</FaultRule>

Chủ đề có liên quan