Chính sách OAuthV2

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Nội dung

OAuthV2 là một chính sách nhiều khía cạnh để thực hiện các thao tác loại cấp quyền OAuth 2.0. Đây là chính sách chính dùng để định cấu hình các điểm cuối OAuth 2.0 trên Apigee Edge.

Mẹo: Nếu bạn muốn tìm hiểu thêm về OAuth trên Apigee Edge, hãy xem trang chủ về OAuth. Trang này cung cấp các đường liên kết đến tài nguyên, mẫu, video và nhiều nội dung khác. Hãy xem mẫu OAuth nâng cao trên GitHub để biết cách minh hoạ rõ ràng cách sử dụng chính sách này trong một ứng dụng đang hoạt động.

Mẫu

VerifyAccessToken

VerifyAccessToken

Cấu hình chính sách OAuthV2 này (với thao tác VerifyAccessToken) xác minh rằng mã truy cập được gửi đến Apigee Edge là hợp lệ. Khi thao tác chính sách này được kích hoạt, Edge sẽ tìm một mã thông báo truy cập hợp lệ trong yêu cầu. Nếu mã truy cập hợp lệ, yêu cầu sẽ được phép tiếp tục. Nếu không hợp lệ, tất cả quá trình xử lý sẽ dừng và lỗi sẽ được trả về trong phản hồi.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Lưu ý: Hệ thống chỉ hỗ trợ Mã thông báo truy cập OAuth 2.0. Không hỗ trợ mã thông báo Mã xác thực thông báo (MAC).

Ví dụ:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

Theo mặc định, Edge chấp nhận mã truy cập trong tiêu đề Authorization có tiền tố Bearer. Bạn có thể thay đổi giá trị mặc định này bằng phần tử <AccessToken>.

GenerateAccessToken

Tạo mã thông báo truy cập

Để xem ví dụ về cách yêu cầu mã truy cập cho từng loại quyền được hỗ trợ, hãy xem bài viết Yêu cầu mã truy cập và mã uỷ quyền. Chủ đề này bao gồm ví dụ về các phép toán sau:

GenerateAuthorizationCode

Tạo mã uỷ quyền

Để biết các ví dụ về cách yêu cầu mã uỷ quyền, hãy xem bài viết Yêu cầu mã uỷ quyền.

RefreshAccessToken

Làm mới mã truy cập

Để biết ví dụ về cách yêu cầu mã truy cập bằng mã làm mới, hãy xem phần Làm mới mã truy cập.

Mã thông báo luồng phản hồi

Tạo mã truy cập trên luồng phản hồi

Đôi khi, bạn có thể cần tạo mã thông báo truy cập trong luồng phản hồi. Ví dụ: bạn có thể thực hiện việc này để phản hồi một số xác thực tuỳ chỉnh được thực hiện trong một dịch vụ phụ trợ. Trong ví dụ này, trường hợp sử dụng yêu cầu cả mã truy cập và mã làm mới, loại trừ loại cấp phép ngầm ẩn. Trong trường hợp này, chúng ta sẽ sử dụng loại cấp quyền bằng mật khẩu để tạo mã thông báo. Như bạn sẽ thấy, mẹo để thực hiện việc này là chuyển tiêu đề của Yêu cầu uỷ quyền kèm theo chính sách JavaScript.

Trước tiên, hãy xem chính sách mẫu:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Nếu bạn đặt chính sách này vào luồng phản hồi, thì luồng này sẽ không thành công với lỗi 401 Không được uỷ quyền mặc dù các thông số đăng nhập chính xác được chỉ định trong chính sách. Để giải quyết vấn đề này, bạn cần đặt tiêu đề yêu cầu Uỷ quyền.

Tiêu đề Uỷ quyền phải chứa một giao thức truy cập cơ bản với client_id:client_secret được mã hoá Base64.

Bạn có thể thêm tiêu đề này bằng một chính sách JavaScript được đặt ngay trước chính sách OAuthV2, như bên dưới. Các biến "local_clientid" và "local_secret" phải được đặt trước đó và có sẵn trong luồng:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

Xem thêm phần "Mã hoá thông tin xác thực cơ bản".

Tham chiếu phần tử

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

Chính sách mẫu dưới đây là một trong nhiều cấu hình có thể áp dụng. Mẫu này cho thấy một chính sách OAuthV2 được định cấu hình cho thao tác GenerateAccessToken. Tệp này bao gồm các phần tử bắt buộc và không bắt buộc. Hãy tham khảo nội dung mô tả về phần tử trong phần này để biết thông tin chi tiết.

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

Thuộc tính <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

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

Thuộc tính Mô tả Mặc định Sự hiện diện
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, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) 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 tên ngôn ngữ tự nhiên khác.

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

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

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

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặ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 luồng đó vẫn được liên kết với một luồng.

đúng 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

&lt;DisplayName&gt; phần tử

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

<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 của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <AccessToken>

<AccessToken>request.header.access_token</AccessToken>

Theo mặc định, VerifyAccessToken gửi mã truy cập trong tiêu đề Authorization. Bạn có thể thay đổi giá trị mặc định đó bằng phần tử này. Ví dụ: request.queryparam.access_token cho biết mã thông báo truy cập phải xuất hiện dưới dạng tham số truy vấn có tên là access_token.

Ví dụ về trường hợp chỉ định <AccessToken>request.header.access_token</AccessToken>:

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
Ví dụ về trường hợp chỉ định <AccessToken>request.queryparam.access_token</AccessToken>:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

Mặc định:

Không áp dụng

Sự hiện diện:

Không bắt buộc

Loại: Chuỗi
Dùng với thao tác:
  • VerifyAccessToken

Phần tử <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

Theo mặc định, VerifyAccessToken dự kiến mã truy cập sẽ được gửi trong tiêu đề Uỷ quyền dưới dạng mã thông báo Bearer. Ví dụ:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Hiện tại, Bearer là tiền tố duy nhất được hỗ trợ.

Mặc định:

Sóng mang

Trạng thái hiện diện:

Không bắt buộc

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

Sóng mang

Dùng với các toán tử:
  • VerifyAccessToken

Phần tử <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

Trong trường hợp phải gửi mã nhận dạng người dùng cuối của ứng dụng đến máy chủ uỷ quyền, phần tử này cho phép bạn chỉ định vị trí Edge sẽ tìm mã nhận dạng người dùng cuối. Ví dụ: bạn có thể gửi thông số này dưới dạng tham số truy vấn hoặc trong tiêu đề HTTP.

Ví dụ: request.queryparam.app_enduser cho biết rằng AppEndUser phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?app_enduser=ntesla@theramin.com. Ví dụ: để yêu cầu AppEndUser trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.app_enduser.

Khi cung cấp chế độ cài đặt này, bạn có thể đưa mã nhận dạng người dùng cuối của ứng dụng vào mã truy cập. Tính năng này rất hữu ích nếu bạn muốn truy xuất hoặc thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối. Để biết thêm thông tin, hãy xem bài viết Cho phép truy xuất và thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối, mã ứng dụng hoặc cả hai.

Mặc định:

Không áp dụng

Sự hiện diện:

Không bắt buộc

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

Bất kỳ biến flow nào mà chính sách có thể truy cập trong thời gian chạy.

Được dùng với các loại quyền cấp:
  • authorization_code
  • ngầm ẩn
  • mật khẩu
  • client_credentials

<Thuộc tính/Thuộc tính>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

Sử dụng phần tử này để thêm các thuộc tính tuỳ chỉnh vào mã truy cập hoặc mã uỷ quyền. Ví dụ: bạn có thể muốn nhúng mã nhận dạng người dùng hoặc mã nhận dạng phiên vào mã thông báo truy cập có thể được trích xuất và kiểm tra trong thời gian chạy.

Phần tử này cho phép bạn chỉ định một giá trị trong biến flow hoặc từ một chuỗi cố định. Nếu bạn chỉ định cả biến và chuỗi, thì giá trị được chỉ định trong biến flow sẽ được sử dụng. Nếu không thể phân giải biến, thì chuỗi sẽ là giá trị mặc định.

Để biết thêm thông tin về cách sử dụng phần tử này, hãy xem bài viết Tuỳ chỉnh mã thông báo và mã uỷ quyền.

Hiện hoặc ẩn các thuộc tính tuỳ chỉnh trong phản hồi

Hãy nhớ rằng nếu bạn đặt phần tử GenerateResponse của chính sách này thành true, thì dữ liệu JSON đầy đủ của mã thông báo sẽ được trả về trong phản hồi, bao gồm cả mọi thuộc tính tuỳ chỉnh đã đặt. Trong một số trường hợp, bạn có thể muốn ẩn một số hoặc tất cả thuộc tính tuỳ chỉnh của mình trong phản hồi để các ứng dụng khách không nhìn thấy những thuộc tính đó.

Theo mặc định, các thuộc tính tuỳ chỉnh sẽ xuất hiện trong phản hồi. Nếu muốn ẩn chúng, bạn có thể đặt thông số display thành false. Ví dụ:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

Giá trị của thuộc tính display không được lưu giữ. Giả sử bạn tạo một mã truy cập có các thuộc tính tuỳ chỉnh mà bạn muốn ẩn trong phản hồi đã tạo. Việc thiết lập display=false sẽ giúp bạn đạt được mục tiêu đó. Tuy nhiên, nếu mã truy cập mới được tạo sau đó bằng mã làm mới, thì các thuộc tính tuỳ chỉnh ban đầu từ mã truy cập sẽ xuất hiện trong phản hồi mã làm mới. Nguyên nhân là do Edge không nhớ rằng ban đầu thuộc tính display được đặt thành false trong chính sách tạo mã truy cập. Thuộc tính tuỳ chỉnh chỉ là một phần trong siêu dữ liệu của mã truy cập.

Bạn sẽ thấy hành vi tương tự nếu bạn thêm các thuộc tính tuỳ chỉnh vào mã uỷ quyền--khi một mã truy cập được tạo bằng mã đó, các thuộc tính tuỳ chỉnh đó sẽ xuất hiện trong phản hồi của mã truy cập. Xin nhắc lại rằng đây có thể không phải là hành vi bạn mong muốn.

Để ẩn các thuộc tính tuỳ chỉnh trong những trường hợp này, bạn có các lựa chọn sau:

  • Đặt lại rõ ràng các thuộc tính tuỳ chỉnh trong chính sách mã thông báo làm mới và đặt chế độ hiển thị của các thuộc tính đó thành false. Trong trường hợp này, bạn có thể cần truy xuất các giá trị tuỳ chỉnh ban đầu từ mã truy cập ban đầu bằng cách sử dụng chính sách GetOAuthV2Info.
  • Sử dụng chính sách JavaScript xử lý sau để trích xuất thủ công mọi thuộc tính tuỳ chỉnh mà bạn không muốn thấy trong phản hồi.

Xem thêm phần Tuỳ chỉnh mã thông báo và mã uỷ quyền.

Mặc định:

N/A

Trạng thái hiện diện:

Không bắt buộc

Giá trị hợp lệ:
  • name – Tên thuộc tính
  • ref – Giá trị của thuộc tính. Có thể đến từ một biến flow.
  • display – (Không bắt buộc) Cho phép bạn chỉ định liệu các thuộc tính tuỳ chỉnh có xuất hiện trong phản hồi hay không. Nếu là true, các thuộc tính tuỳ chỉnh sẽ xuất hiện trong phản hồi (Nếu GenerateResponse cũng được bật). Nếu là false, các thuộc tính tuỳ chỉnh sẽ không có trong phản hồi. Giá trị mặc định là true. Xem phần Hiển thị hoặc ẩn thuộc tính tuỳ chỉnh trong phản hồi.
Dùng với các loại quyền:
  • authorization_code
  • ngầm ẩn
  • mật khẩu
  • client_credentials
  • refresh_token
  • Cũng có thể dùng với thao tác GenerateAuthorizationCode.

Phần tử <ClientId>

<ClientId>request.formparam.client_id</ClientId>

Trong một số trường hợp, ứng dụng khách phải gửi mã ứng dụng khách đến máy chủ uỷ quyền. Phần tử này chỉ định rằng Apigee nên tìm mã ứng dụng khách trong biến luồng request.formparam.client_id. Không hỗ trợ đặt ClientId thành bất kỳ biến nào khác. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Biến luồng: request.formparam.client_id
Được dùng với các loại quyền cấp:
  • authorization_code
  • mật khẩu
  • ngầm ẩn
  • client_credentials

Cũng có thể được sử dụng với thao tác GeneratePermissionCode.

Phần tử <Code>

<Code>request.queryparam.code</Code>

Trong quy trình cấp quyền, ứng dụng khách phải gửi mã uỷ quyền đến máy chủ uỷ quyền (Apigee Edge). Phần tử này cho phép bạn chỉ định vị trí Edge sẽ tìm kiếm mã uỷ quyền. Ví dụ: bạn có thể gửi thông số này dưới dạng tham số truy vấn, tiêu đề HTTP hoặc tham số biểu mẫu (mặc định).

Biến request.queryparam.auth_code cho biết rằng mã uỷ quyền phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?auth_code=AfGlvs9. Ví dụ: để yêu cầu mã uỷ quyền trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.auth_code. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Sự hiện diện:

tùy chọn

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ biến flow nào mà chính sách có thể truy cập trong thời gian chạy
Được dùng với các loại quyền cấp: authorization_code

Phần tử<ExpiresIn>

<ExpiresIn>10000</ExpiresIn> 

Thực thi thời gian hết hạn của mã truy cập và mã uỷ quyền tính bằng mili giây. (Đối với mã làm mới, hãy sử dụng <RefreshTokenExpiresIn>.) Giá trị thời gian hết hạn là một giá trị do hệ thống tạo cộng với giá trị <ExpiresIn>. Nếu bạn đặt <ExpiresIn> thành -1, thì mã hoặc mã sẽ hết hạn theo thời hạn tối đa của mã truy cập OAuth. Nếu bạn không chỉ định <ExpiresIn>, hệ thống sẽ áp dụng giá trị mặc định được định cấu hình ở cấp hệ thống.

Bạn cũng có thể đặt thời gian hết hạn trong thời gian chạy bằng cách sử dụng giá trị mặc định được mã hoá cứng hoặc bằng cách tham chiếu đến một biến flow. Ví dụ: bạn có thể lưu trữ giá trị thời hạn của mã thông báo trong bản đồ khoá-giá trị, truy xuất, gán giá trị đó cho một biến và tham chiếu giá trị đó trong chính sách. Ví dụ: kvm.oauth.expires_in.

Với Apigee Edge cho đám mây công cộng, Edge lưu giữ các thực thể sau trong bộ nhớ đệm trong tối thiểu 180 giây sau khi các thực thể đó được truy cập.

  • Mã truy cập OAuth. Điều này có nghĩa là mã thông báo bị thu hồi vẫn có thể thành công trong tối đa 3 phút cho đến khi giới hạn bộ nhớ đệm hết hạn.
  • Các thực thể Dịch vụ quản lý khoá (KMS) (Ứng dụng, Nhà phát triển, Sản phẩm API).
  • Thuộc tính tuỳ chỉnh trên mã thông báo OAuth và thực thể KMS.

Các dòng sau đây chỉ định một biến flow và một giá trị mặc định. Xin lưu ý rằng giá trị biến dòng sẽ được ưu tiên hơn giá trị mặc định đã chỉ định.

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge không hỗ trợ cách buộc một mã thông báo hết hạn sau khi tạo. Nếu bạn cần buộc mã thông báo hết hạn (ví dụ: dựa trên một điều kiện), giải pháp khả thi được mô tả trong bài đăng này trên Cộng đồng Apigee.

Theo mặc định, mã truy cập đã hết hạn sẽ tự động bị xoá khỏi hệ thống Apigee Edge 3 ngày sau khi hết hạn. Xem thêm phần Xoá mã thông báo truy cập

Đám mây riêng tư: Đối với quá trình cài đặt Edge for Private Cloud, giá trị mặc định được đặt bằng thuộc tính conf_keymanagement_oauth_auth_code_expiry_time_in_millis. Cách đặt thuộc tính này:

  1. Mở tệp message-processor.properties trong trình chỉnh sửa. Nếu tệp không tồn tại, hãy tạo tệp đó:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Đặt thuộc tính như mong muốn:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Đảm bảo rằng tệp thuộc tính thuộc quyền sở hữu của người dùng "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Khởi động lại Trình xử lý thông báo.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Mặc định:

Nếu bạn không chỉ định, hệ thống sẽ áp dụng giá trị mặc định được định cấu hình ở cấp hệ thống.

Trạng thái hiện diện:

Không bắt buộc

Loại: Số nguyên
Giá trị hợp lệ:
Được dùng với các loại quyền cấp:
  • authorization_code
  • ngầm ẩn
  • mật khẩu
  • client_credentials
  • refresh_token

Cũng được dùng với thao tác GenerateAuthorizationCode.

Phần tử <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Cho Apigee Edge biết nơi tìm mã truy cập bên ngoài (mã truy cập không do Apigee Edge tạo).

Biến request.queryparam.external_access_token cho biết mã truy cập bên ngoài phải hiện diện dưới dạng tham số truy vấn, chẳng hạn như ?external_access_token=12345678. Ví dụ: để yêu cầu mã truy cập bên ngoài trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.external_access_token. Xem thêm phần Sử dụng mã thông báo OAuth của bên thứ ba.

Phần tử <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

Nếu phần tử này là false hoặc không có, thì Edge sẽ xác thực client_id và client_secret thông thường dựa trên kho uỷ quyền Apigee Edge. Sử dụng phần tử này khi bạn muốn làm việc với mã thông báo OAuth của bên thứ ba. Để biết thông tin chi tiết về cách sử dụng phần tử này, hãy xem phần Sử dụng mã thông báo OAuth của bên thứ ba.

Mặc định:

false

Trạng thái hiện diện:

Không bắt buộc

Loại: Boolean
Giá trị hợp lệ: true hoặc false
Được dùng với các loại quyền cấp:
  • authorization_code
  • mật khẩu
  • client_credentials

Phần tử <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Cho Apigee Edge biết nơi tìm mã xác thực bên ngoài (mã xác thực không do Apigee Edge tạo).

Biến request.queryparam.external_auth_code cho biết rằng mã xác thực bên ngoài phải xuất hiện dưới dạng một tham số truy vấn, chẳng hạn như ?external_auth_code=12345678. Ví dụ: để yêu cầu mã xác thực bên ngoài trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.external_auth_code. Hãy xem thêm bài viết Sử dụng mã thông báo OAuth của bên thứ ba.

Phần tử <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Cho Apigee Edge biết nơi tìm mã làm mới bên ngoài (mã làm mới không do Apigee Edge tạo).

Biến request.queryparam.external_refresh_token cho biết mã thông báo làm mới bên ngoài phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?external_refresh_token=12345678. Ví dụ: để yêu cầu mã thông báo làm mới bên ngoài trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.external_refresh_token. Xem thêm phần Sử dụng mã thông báo OAuth của bên thứ ba.

Phần tử <GenerateResponse>

<GenerateResponse enabled='true'/>

Nếu bạn đặt thành true, chính sách sẽ tạo và trả về một phản hồi. Ví dụ: đối với GenerateAccessToken, phản hồi có thể như sau:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Nếu là false, hệ thống sẽ không gửi phản hồi. Thay vào đó, một tập hợp các biến flow (luồng) được điền sẵn bằng các giá trị liên quan đến hàm của chính sách. Ví dụ: một biến flow có tên oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code sẽ được điền bằng mã uỷ quyền mới tạo. Xin lưu ý rằng expires_in được biểu thị bằng giây trong phản hồi.

Mặc định:

false

Trạng thái hiện diện:

Không bắt buộc

Loại: chuỗi
Giá trị hợp lệ: true hoặc false
Được dùng với các loại quyền cấp:
  • ngầm ẩn
  • mật khẩu
  • client_credentials
  • refresh_token
  • Cũng có thể dùng với thao tác GenerateAuthorizationCode.

Phần tử <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

Nếu được đặt thành true, chính sách sẽ tạo và trả về phản hồi nếu thuộc tính ContinueOnError được đặt thành true. Nếu là false (mặc định), hệ thống sẽ không gửi phản hồi. Thay vào đó, một tập hợp các biến flow (luồng) được điền sẵn các giá trị liên quan đến hàm của chính sách.

Mặc định:

false

Trạng thái hiện diện:

Không bắt buộc

Loại: chuỗi
Giá trị hợp lệ: true hoặc false
Được dùng với các loại quyền cấp:
  • ngầm ẩn
  • mật khẩu
  • client_credentials
  • refresh_token
  • Cũng có thể dùng với thao tác GenerateAuthorizationCode.

<GrantType>

<GrantType>request.queryparam.grant_type</GrantType>

Cho chính sách biết nơi tìm tham số loại cấp được truyền trong một yêu cầu. Theo quy cách kỹ thuật của OAuth 2.0, loại cấp phép phải được cung cấp cùng với các yêu cầu về mã truy cập và mã uỷ quyền. Biến này có thể là tiêu đề, tham số truy vấn hoặc tham số biểu mẫu (mặc định).

Ví dụ: request.queryparam.grant_type cho biết rằng Mật khẩu phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?grant_type=password. Ví dụ: để yêu cầu loại cấp trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.grant_type. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc

Loại: chuỗi
Giá trị hợp lệ: Một biến, như đã giải thích ở trên.
Được dùng với các loại quyền cấp:
  • authorization_code
  • mật khẩu
  • ngầm ẩn
  • client_credentials
  • refresh_token

Phần tử <Operation>

<Operation>GenerateAuthorizationCode</Operation>

Thao tác OAuth 2.0 do chính sách thực thi.

Mặc định:

Nếu bạn không chỉ định <Operation>, Edge sẽ xem danh sách <SupportedGrantTypes>. Chỉ những thao tác trên các loại quyền cấp đó mới thành công. Nói cách khác, bạn có thể bỏ qua <Operation> nếu chỉ định <GrantType> trong danh sách <SupportedGrantTypes>. Nếu bạn không chỉ định <Operation> hoặc <SupportedGrantTypes>, thì loại cấp quyền mặc định sẽ là authorization_code. Tức là các yêu cầu cấp quyền loại authorization_code sẽ thành công, nhưng tất cả các yêu cầu khác sẽ không thành công.

Trạng thái hiện diện:

Không bắt buộc

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

Phần tử <PassWord>

<PassWord>request.queryparam.password</PassWord>

Phần tử này được dùng với chỉ loại cấp mật khẩu. Với hình thức cấp mật khẩu, thông tin đăng nhập của người dùng (mật khẩu và tên người dùng) phải được cung cấp cho chính sách OAuthV2. Các phần tử <PassWord><UserName> được dùng để chỉ định các biến mà Edge có thể tìm thấy các giá trị này. Nếu bạn không chỉ định các phần tử này, chính sách sẽ tìm thấy các giá trị (theo mặc định) trong các tham số biểu mẫu có tên là usernamepassword. Nếu không tìm thấy giá trị, chính sách sẽ gửi thông báo lỗi. Bạn có thể sử dụng các phần tử <PassWord><UserName> để tham chiếu đến bất kỳ biến flow nào chứa thông tin xác thực.

Ví dụ: bạn có thể truyền mật khẩu trong yêu cầu mã thông báo bằng cách sử dụng tham số truy vấn và đặt phần tử như sau: <PassWord>request.queryparam.password</PassWord>. Để yêu cầu mật khẩu trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.password.

Chính sách OAuthV2 không thực hiện thao tác nào khác đối với các giá trị thông tin xác thực này. Edge chỉ đơn giản là xác minh rằng các giá trị đó có hiện diện. Nhà phát triển API có thể truy xuất yêu cầu giá trị và gửi các yêu cầu đó đến nhà cung cấp danh tính trước khi chính sách tạo mã thông báo thực thi.

Xem thêm phần Yêu cầu mã truy cập và mã uỷ quyền.

Mặc định:

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

Sự hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ biến flow nào có sẵn cho chính sách trong thời gian chạy.
Được dùng với các loại quyền cấp: mật khẩu

Phần tử <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Chỉ định vị trí Edge sẽ tìm thông số redirect_uri trong yêu cầu.

Giới thiệu về URI chuyển hướng

URI chuyển hướng được dùng với mã uỷ quyền và các loại cấp quyền ngầm ẩn. URI chuyển hướng cho máy chủ uỷ quyền (Edge) biết vị trí gửi mã uỷ quyền (đối với loại cấp mã xác thực) hoặc mã truy cập (đối với loại cấp quyền ngầm ẩn). Bạn cần hiểu rõ thời điểm bắt buộc phải sử dụng tham số này, thời điểm không bắt buộc và cách sử dụng tham số này:

  • (bắt buộc) Nếu URL gọi lại được đăng ký với ứng dụng của nhà phát triển liên kết với các khoá ứng dụng của yêu cầu và nếu redirect_uri có trong yêu cầu, thì cả hai phải khớp chính xác. Nếu không khớp, hệ thống sẽ trả về lỗi. Để biết thông tin về cách đăng ký ứng dụng dành cho nhà phát triển trên Edge và chỉ định URL gọi lại, hãy xem bài viết Đăng ký ứng dụng và quản lý khoá API.

  • (không bắt buộc) Nếu một URL gọi lại được đăng ký và thiếu redirect_uri trong yêu cầu, thì Edge sẽ chuyển hướng đến URL gọi lại đã đăng ký.
  • (bắt buộc) Nếu bạn không đăng ký URL gọi lại, thì bạn bắt buộc phải có redirect_uri. Xin lưu ý rằng trong trường hợp này, Edge sẽ chấp nhận MỌI URL. Trường hợp này có thể gây ra vấn đề bảo mật, vì vậy, bạn chỉ nên sử dụng với các ứng dụng khách đáng tin cậy. Nếu ứng dụng khách không đáng tin cậy, thì phương pháp hay nhất là luôn yêu cầu đăng ký một URL gọi lại.

Bạn có thể gửi tham số này trong tham số truy vấn hoặc trong tiêu đề. Biến request.queryparam.redirect_uri cho biết rằng RedirectUri phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?redirect_uri=login.myapp.com. Ví dụ: để yêu cầu RedirectUri trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.redirect_uri. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ biến flow nào có thể truy cập được trong chính sách trong thời gian chạy
Được dùng với các loại quyền cấp:
  • authorization_code
  • ngầm ẩn

Cũng được dùng với toán tử GenerateAuthorizationCode.

Phần tử <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

Khi yêu cầu mã truy cập bằng mã làm mới, bạn phải cung cấp mã làm mới trong yêu cầu. Phần tử này cho phép bạn chỉ định nơi Edge sẽ tìm mã làm mới. Ví dụ: bạn có thể gửi thông số này dưới dạng tham số truy vấn, tiêu đề HTTP hoặc tham số biểu mẫu (mặc định).

Biến request.queryparam.refreshtoken cho biết mã thông báo làm mới phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?refresh_token=login.myapp.com. Ví dụ: để yêu cầu RefreshToken trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.refresh_token. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ biến flow nào có thể truy cập được trong chính sách trong thời gian chạy
Được dùng với các loại quyền cấp:
  • refresh_token

Phần tử <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Thực thi thời gian hết hạn của mã thông báo làm mới tính bằng mili giây. Giá trị thời gian hết hạn là giá trị do hệ thống tạo cộng với giá trị <RefreshTokenExpiresIn>. Nếu bạn đặt <RefreshTokenExpiresIn> thành -1, thì mã làm mới sẽ hết hạn theo thời gian hết hạn tối đa của mã làm mới OAuth. Nếu bạn không chỉ định <RefreshTokenExpiresIn>, hệ thống sẽ áp dụng giá trị mặc định được định cấu hình ở cấp hệ thống. Hãy liên hệ với Nhóm hỗ trợ Apigee Edge để biết thêm thông tin về chế độ cài đặt hệ thống mặc định.

Bạn cũng có thể đặt thời gian hết hạn trong thời gian chạy bằng cách sử dụng giá trị mặc định được mã hoá cứng hoặc bằng cách tham chiếu đến một biến flow. Ví dụ: bạn có thể lưu trữ giá trị hết hạn của mã thông báo trong một ánh xạ giá trị khoá, truy xuất giá trị đó, gán giá trị đó cho một biến và tham chiếu giá trị đó trong chính sách. Ví dụ: kvm.oauth.expires_in.

Đoạn văn sau đây cũng chỉ định một biến luồng và một giá trị mặc định. Xin lưu ý rằng giá trị biến dòng chảy sẽ được ưu tiên hơn giá trị mặc định đã chỉ định.

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Đám mây riêng tư: Đối với quá trình cài đặt Edge for Private Cloud, giá trị mặc định được đặt bằng thuộc tính conf_keymanagement_oauth_refresh_token_expiry_time_in_millis. Cách đặt thuộc tính này:

  1. Mở tệp message-processor.properties trong trình chỉnh sửa. Nếu tệp không tồn tại, hãy tạo tệp đó:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Đặt thuộc tính như mong muốn:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Đảm bảo rằng tệp thuộc tính thuộc quyền sở hữu của người dùng "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Khởi động lại Trình xử lý thông báo.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Mặc định:

63072000000 mili giây (2 năm) (có hiệu lực từ ngày 5 tháng 8 năm 2024)

Trạng thái hiện diện:

Không bắt buộc

Loại: Số nguyên
Giá trị hợp lệ:
Được dùng với các loại quyền cấp:
  • authorization_code
  • mật khẩu
  • refresh_token

Phần tử <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

Phần tử này cho Edge biết loại quyền cấp mà ứng dụng khách đang yêu cầu. Phương thức này chỉ được dùng với mã uỷ quyền và quy trình cấp loại ngầm ẩn.

Theo mặc định, Edge sẽ tìm giá trị loại phản hồi trong tham số truy vấn response_type. Nếu bạn muốn ghi đè hành vi mặc định này, hãy sử dụng phần tử <ResponseType> để định cấu hình một biến flow chứa giá trị loại phản hồi. Ví dụ: nếu bạn đặt phần tử này thành request.header.response_type, Edge sẽ tìm loại phản hồi cần được chuyển trong tiêu đề của yêu cầu. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc. Sử dụng phần tử này nếu bạn muốn ghi đè hành vi mặc định.

Loại: Chuỗi
Giá trị hợp lệ: code (đối với loại cấp mã uỷ quyền) hoặc token (đối với loại cấp quyền ngầm ẩn)
Được dùng với các loại quyền cấp:
  • ngầm ẩn
  • Cũng được dùng với toán tử GenerateAuthorizationCode.

Phần tử <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Khi được đặt thành true, mã làm mới hiện có sẽ được sử dụng lại cho đến khi hết hạn. Nếu là false, Apigee Edge sẽ phát hành một mã thông báo làm mới mới khi bạn cung cấp một mã thông báo làm mới hợp lệ.

Mặc định:

false

Sự hiện diện:

tùy chọn

Loại: boolean
Giá trị hợp lệ:

true hoặc false

Được dùng với loại quyền:
  • refresh_token

Phần tử <Scope>

<Scope>request.queryparam.scope</Scope>

Nếu có trong một trong các chính sách GenerateAccessToken hoặc GenerateAuthorizationCode, phần tử này sẽ được dùng để chỉ định phạm vi cấp mã hoặc mã thông báo. Các giá trị này thường được truyền đến chính sách trong yêu cầu từ ứng dụng khách. Bạn có thể định cấu hình phần tử để lấy một biến luồng, cho phép bạn chọn cách truyền phạm vi trong một yêu cầu. Trong ví dụ sau, request.queryparam.scope cho biết rằng phạm vi phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?scope=READ. Ví dụ: để yêu cầu phạm vi trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.scope.

Nếu phần tử này xuất hiện trong một chính sách "VerifyAccessToken", thì phần tử này sẽ được dùng để chỉ định phạm vi mà chính sách này sẽ thực thi. Trong loại chính sách này, giá trị phải là tên phạm vi "đã mã hoá cứng" – bạn không thể sử dụng biến. Ví dụ:

<Scope>A B</Scope>

Xem thêm phần Làm việc với phạm vi OAuth2Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

Không có phạm vi

Trạng thái hiện diện:

Không bắt buộc

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

Nếu được sử dụng với chính sách Tạo*, một biến flow.

Nếu được sử dụng với VerifyAccessToken, danh sách tên phạm vi (chuỗi) được phân tách bằng dấu cách.

Dùng với các loại quyền:
  • authorization_code
  • ngầm ẩn
  • mật khẩu
  • client_credentials
  • Cũng có thể dùng với các thao tác GenerateAuthorizationCode và VerifyAccessToken.

Phần tử <State>

<State>request.queryparam.state</State>

Trong trường hợp ứng dụng khách phải gửi thông tin trạng thái đến máy chủ uỷ quyền, phần tử này cho phép bạn chỉ định vị trí Edge sẽ tìm kiếm các giá trị trạng thái. Ví dụ: bạn có thể gửi thông tin này dưới dạng tham số truy vấn hoặc trong tiêu đề HTTP. Giá trị trạng thái thường được dùng làm biện pháp bảo mật để ngăn chặn các cuộc tấn công CSRF.

Ví dụ: request.queryparam.state cho biết trạng thái phải xuất hiện dưới dạng tham số truy vấn, chẳng hạn như ?state=HjoiuKJH32. Ví dụ: để yêu cầu trạng thái trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.state. Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

Không có trạng thái

Trạng thái hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ biến flow nào mà chính sách có thể truy cập trong thời gian chạy
Được dùng với các loại quyền cấp:
  • Tất cả
  • Cũng có thể dùng với thao tác GenerateAuthorizationCode

Phần tử <StoreToken>

 <StoreToken>true</StoreToken> 

Đặt phần tử này thành true khi phần tử <ExternalAuthorization>true. Phần tử <StoreToken> yêu cầu Apigee Edge lưu trữ mã truy cập bên ngoài. Nếu không, giá trị này sẽ không được duy trì.

Mặc định:

false

Trạng thái hiện diện:

Không bắt buộc

Loại: Boolean
Giá trị hợp lệ: true hoặc false
Được dùng với các loại quyền cấp:
  • authorization_code
  • mật khẩu
  • client_credentials

Phần tử <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Chỉ định các loại quyền mà điểm cuối của mã thông báo OAuth trên Apigee Edge hỗ trợ. Một điểm cuối có thể hỗ trợ nhiều loại cấp phép (tức là một điểm cuối có thể được định cấu hình để phân phối mã thông báo truy cập cho nhiều loại cấp phép). Để biết thêm về điểm cuối, hãy xem phần Tìm hiểu về điểm cuối OAuth. Loại cấp phép được truyền trong các yêu cầu mã thông báo trong tham số grant_type.

Nếu bạn không chỉ định loại quyền cấp được hỗ trợ, thì các loại quyền cấp duy nhất được phép sẽ là authorization_codeimplicit. Xem thêm phần tử <GrantType> (là một phần tử cấp cao hơn dùng để chỉ định vị trí Apigee Edge sẽ tìm thông số grant_type được truyền trong yêu cầu của ứng dụng. Edge sẽ đảm bảo rằng giá trị của tham số grant_type khớp với một trong các loại quyền được hỗ trợ).

Mặc định:

authorization _code và ngầm ẩn

Trạng thái hiện diện:

Bắt buộc

Loại: Chuỗi
Giá trị hợp lệ:
  • client_credentials
  • authorization_code
  • mật khẩu
  • ngầm ẩn

Phần tử <Tokens>/<Token>

Dùng với các thao tác ValidateToken và InvalidateToken. Xem thêm phần Chấp thuận và thu hồi mã truy cập. Phần tử <Token> xác định biến luồng xác định nguồn của mã thông báo cần thu hồi. Ví dụ: nếu nhà phát triển dự kiến sẽ gửi mã thông báo truy cập dưới dạng tham số truy vấn có tên là access_token, hãy sử dụng request.queryparam.access_token.

Phần tử <UserName>

<UserName>request.queryparam.user_name</UserName>

Phần tử này chỉ được dùng với loại cấp quyền bằng mật khẩu. Với hình thức cấp mật khẩu, thông tin đăng nhập của người dùng (mật khẩu và tên người dùng) phải được cung cấp cho chính sách OAuthV2. Các phần tử <PassWord><UserName> được dùng để chỉ định các biến mà Edge có thể tìm thấy các giá trị này. Nếu bạn không chỉ định các phần tử này, chính sách sẽ tìm thấy các giá trị (theo mặc định) trong các tham số biểu mẫu có tên là usernamepassword. Nếu không tìm thấy các giá trị này, chính sách sẽ gửi một lỗi. Bạn có thể sử dụng các phần tử <PassWord><UserName> để tham chiếu đến bất kỳ biến luồng nào có chứa thông tin xác thực.

Ví dụ: bạn có thể truyền tên người dùng trong tham số truy vấn và đặt phần tử <UserName> như sau: <UserName>request.queryparam.username</UserName>.Để yêu cầu tên người dùng trong tiêu đề HTTP, hãy đặt giá trị này thành request.header.username.

Chính sách OAuthV2 không làm gì khác với các giá trị thông tin xác thực này; Edge chỉ xác minh rằng các giá trị này có mặt. Nhà phát triển API có thể truy xuất yêu cầu giá trị và gửi các yêu cầu đó đến nhà cung cấp danh tính trước khi chính sách tạo mã thông báo thực thi.

Xem thêm phần Yêu cầu mã thông báo truy cập và mã uỷ quyền.

Mặc định:

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

Trạng thái hiện diện:

Không bắt buộc

Loại: Chuỗi
Giá trị hợp lệ: Bất kỳ chế độ cài đặt biến nào.
Được dùng với các loại quyền cấp: mật khẩu

Xác minh mã truy cập

Sau khi thiết lập điểm cuối mã thông báo cho proxy API, chính sách OAuthV2 tương ứng chỉ định thao tác VerifyAccessToken sẽ được đính kèm vào Flow để hiển thị tài nguyên được bảo vệ.

Ví dụ: để đảm bảo rằng tất cả yêu cầu đối với một API đều được uỷ quyền, chính sách sau đây sẽ thực thi việc xác minh mã truy cập:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

Chính sách này được đính kèm với tài nguyên API cần được bảo vệ. Để đảm bảo tất cả các yêu cầu đến một API đều được xác minh, hãy đính kèm chính sách vào quy trình PreFlow của yêu cầu ProxyEndpoint như sau:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

Bạn có thể sử dụng các phần tử không bắt buộc sau đây để ghi đè chế độ cài đặt mặc định cho thao tác VerifyAccessToken.

Tên Mô tả
Phạm vi

Danh sách các phạm vi được phân tách bằng dấu cách. Quá trình xác minh sẽ thành công nếu ít nhất một trong các phạm vi được liệt kê có trong mã truy cập. Ví dụ: chính sách sau đây sẽ kiểm tra mã truy cập để đảm bảo rằng mã đó chứa ít nhất một trong các phạm vi được liệt kê. Nếu có READ hoặc WRITE, quá trình xác minh sẽ thành công.

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken Biến dự kiến sẽ chứa mã thông báo truy cập. Ví dụ: request.queryparam.accesstoken. Theo mặc định, ứng dụng sẽ hiển thị mã truy cập trong tiêu đề HTTP Uỷ quyền, theo quy cách OAuth 2.0. Sử dụng chế độ cài đặt này nếu mã thông báo truy cập dự kiến sẽ xuất hiện ở một vị trí không chuẩn, chẳng hạn như một tham số truy vấn hoặc tiêu đề HTTP có tên khác với Authorization (Uỷ quyền).

Hãy xem thêm bài viết Xác minh mã truy cậpYêu cầu mã truy cập và mã uỷ quyền.

Chỉ định vị trí của biến yêu cầu

Đối với mỗi loại quyền cấp, chính sách sẽ đưa ra giả định về vị trí hoặc thông tin bắt buộc trong thông báo yêu cầu. Các giả định này dựa trên thông số kỹ thuật OAuth 2.0. Nếu ứng dụng của bạn cần khác với quy cách OAuth 2.0, thì bạn có thể chỉ định các vị trí dự kiến cho từng tham số. Ví dụ: khi xử lý mã uỷ quyền, bạn có thể chỉ định vị trí của mã uỷ quyền, mã ứng dụng, URI chuyển hướng và phạm vi. Bạn có thể chỉ định các tham số này dưới dạng tiêu đề HTTP, tham số truy vấn hoặc tham số biểu mẫu.

Ví dụ bên dưới minh hoạ cách bạn có thể chỉ định vị trí của các tham số mã uỷ quyền bắt buộc dưới dạng tiêu đề HTTP:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

Hoặc nếu cần hỗ trợ cơ sở ứng dụng khách, bạn có thể kết hợp và so khớp các tiêu đề với tham số truy vấn:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

Bạn chỉ có thể định cấu hình một vị trí cho mỗi tham số.

Biến flow

Các biến luồng được xác định trong bảng này được điền sẵn dữ liệu khi các chính sách OAuth tương ứng được thực thi. Do đó, các chính sách hoặc ứng dụng khác sẽ có thể thực thi các chính sách proxy API.

Thao tác VerifyAccessToken

Thao tác VerifyAccessToken thực thi, một số lượng lớn biến luồng được điền sẵn trong ngữ cảnh thực thi của proxy. Các biến này cung cấp cho bạn các thuộc tính liên quan đến mã truy cập, ứng dụng của nhà phát triển, nhà phát triển và công ty. Ví dụ: bạn có thể sử dụng chính sách AssignMessage hoặc JavaScript để đọc bất kỳ biến nào trong số này và sử dụng các biến đó khi cần trong luồng sau này. Các biến này cũng có thể hữu ích cho mục đích gỡ lỗi.

Biến dành riêng cho mã thông báo

Biến Mô tả
organization_name Tên của tổ chức nơi thực thi proxy.
developer.id Mã nhận dạng của nhà phát triển được liên kết với ứng dụng khách đã đăng ký.
developer.app.name Tên của nhà phát triển liên kết với ứng dụng khách đã đăng ký.
client_id Mã ứng dụng khách của ứng dụng khách đã đăng ký.
grant_type Loại cấp phép liên kết với yêu cầu.
token_type Loại mã thông báo liên kết với yêu cầu.
access_token Mã truy cập đang được xác minh.
accesstoken.{custom_attribute} Thuộc tính tuỳ chỉnh đã đặt tên trong mã truy cập.
issued_at Ngày phát hành mã truy cập được biểu thị theo thời gian bắt đầu của hệ thống Unix (tính bằng mili giây).
expires_in Thời gian hết hạn của mã thông báo truy cập. Được biểu thị bằng giây. Mặc dù phần tử ExpiresIn đặt thời gian hết hạn bằng mili giây, nhưng trong phản hồi mã thông báo và biến luồng, giá trị này được biểu thị bằng giây.
status Trạng thái của mã truy cập (ví dụ: đã phê duyệt hoặc đã thu hồi).
scope Phạm vi (nếu có) liên kết với mã thông báo truy cập.
apiproduct.<custom_attribute_name> Một thuộc tính tuỳ chỉnh được đặt tên của sản phẩm API được liên kết với ứng dụng khách đã đăng ký.
apiproduct.name Tên của sản phẩm API liên kết với ứng dụng khách đã đăng ký.
revoke_reason

(Chỉ dành cho Apigee kết hợp) Cho biết lý do mã truy cập bị thu hồi.

Giá trị có thể là REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER hoặc TOKEN_REVOKED.

Biến dành riêng cho ứng dụng

Các biến này liên quan đến Ứng dụng dành cho nhà phát triển được liên kết với mã thông báo.

Biến Mô tả
app.name
app.id
app.accessType
app.callbackUrl
app.status đã được phê duyệt hoặc đã bị thu hồi
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType Ví dụ: Nhà phát triển
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Một thuộc tính tuỳ chỉnh được đặt tên của ứng dụng khách đã đăng ký.

Biến dành riêng cho nhà phát triển

Nếu app.appType là "Company" (Công ty), thì các thuộc tính công ty sẽ được điền sẵn và nếu app.appType là "Developer" (Nhà phát triển), thì các thuộc tính nhà phát triển sẽ được điền sẵn.

Biến Mô tả
Biến dành riêng cho nhà phát triển
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status đang hoạt động hoặc không hoạt động
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} Thuộc tính tuỳ chỉnh được đặt tên của nhà phát triển.

Biến dành riêng cho công ty

Nếu app.appType là "Company" (Công ty), thì các thuộc tính công ty sẽ được điền sẵn và nếu app.appType là "Developer" (Nhà phát triển), thì các thuộc tính nhà phát triển sẽ được điền sẵn.

Biến Mô tả
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} Một thuộc tính tuỳ chỉnh được đặt tên của công ty.

Thao tác GenerateAuthorizationCode

Các biến này được đặt khi thao tác GenerateAuthorizationCode thực thi thành công:

Tiền tố: oauthv2authcode.{policy_name}.{variable_name}

Ví dụ: oauthv2authcode.GenerateCodePolicy.code

Biến Mô tả
code Mã uỷ quyền được tạo khi chính sách này thực thi.
redirect_uri URI chuyển hướng được liên kết với ứng dụng khách đã đăng ký.
scope Phạm vi OAuth không bắt buộc được truyền trong yêu cầu của ứng dụng.
client_id Mã ứng dụng được truyền trong yêu cầu ứng dụng.

Thao tác GenerateAccessToken và RefreshAccessToken

Các biến này được đặt khi các hoạt động GenerateAccessToken và RefreshAccessToken thực thi thành công. Xin lưu ý rằng các biến mã thông báo làm mới không áp dụng cho luồng loại cấp thông tin xác thực ứng dụng.

Tiền tố: oauthv2accesstoken.{policy_name}.{variable_name}

Ví dụ: oauthv2accesstoken.GenerateTokenPolicy.access_token

Tên biến Mô tả
access_token Mã truy cập đã được tạo.
client_id Mã ứng dụng khách của ứng dụng nhà phát triển được liên kết với mã thông báo này.
expires_in Giá trị hết hạn của mã thông báo. Hãy xem phần tử <ExpiresIn> để biết thông tin chi tiết. Xin lưu ý rằng trong phản hồi, expires_in được biểu thị bằng giây.
scope Danh sách các phạm vi hiện có được định cấu hình cho mã thông báo. Xem bài viết Làm việc với các phạm vi OAuth2.
status approved hoặc revoked.
token_type Được đặt thành BearerToken.
developer.email Địa chỉ email của nhà phát triển đã đăng ký sở hữu ứng dụng dành cho nhà phát triển được liên kết với mã thông báo.
organization_name Tổ chức mà proxy thực thi.
api_product_list Danh sách các sản phẩm được liên kết với ứng dụng nhà phát triển tương ứng của mã thông báo.
refresh_count
refresh_token Mã làm mới đã được tạo. Xin lưu ý rằng mã thông báo làm mới không được tạo cho loại cấp thông tin xác thực ứng dụng.
refresh_token_expires_in Thời gian tồn tại của mã làm mới, tính bằng giây.
refresh_token_issued_at Giá trị thời gian này là chuỗi đại diện cho số lượng dấu thời gian 32 bit tương ứng. Ví dụ: "Thứ Tư, ngày 21 tháng 8 năm 2013 19:16:47 (giờ UTC)" tương ứng với giá trị dấu thời gian là 1377112607413.
refresh_token_status approved hoặc revoked.

GenerateAccessTokenImplicitGrant

Các biến này được đặt khi thao tác GenerateAccessTokenImplicit thực thi thành công cho luồng loại cấp phép ngầm ẩn.

Tiền tố: oauthv2accesstoken.{policy_name}.{variable_name}

Ví dụ: oauthv2accesstoken.RefreshTokenPolicy.access_token

Biến Mô tả
oauthv2accesstoken.access_token Mã thông báo truy cập được tạo khi chính sách thực thi.
oauthv2accesstoken.{policy_name}.expires_in Giá trị hết hạn của mã thông báo, tính bằng giây. Hãy xem phần tử <ExpiresIn> để biết thông tin chi tiết.

Thông tin tham khảo về 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 đặt 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 bài viết 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 này thực thi.

Mã lỗi Trạng thái HTTP Nguyên nhân Được đưa ra theo toán tử
steps.oauth.v2.access_token_expired 401 Mã truy cập đã hết hạn.

VerifyAccessToken
InvalidateToken

steps.oauth.v2.access_token_not_approved 401 Đã thu hồi mã truy cập. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 Tài nguyên được yêu cầu không tồn tại bất kỳ sản phẩm API nào được liên kết với mã truy cập. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Chính sách dự kiến sẽ tìm thấy mã truy cập trong một biến được chỉ định trong <AccessToken>, nhưng không phân giải được biến. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Chính sách này dự kiến sẽ tìm thấy mã uỷ quyền trong một biến được chỉ định trong <Code>, nhưng không phân giải được biến. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Chính sách dự kiến sẽ tìm thấy Mã ứng dụng khách trong một biến được chỉ định trong <ClientId>, nhưng không phân giải được biến. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Chính sách này dự kiến sẽ tìm thấy mã làm mới trong một biến được chỉ định trong <RefreshToken>, nhưng không phân giải được biến. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Chính sách dự kiến sẽ tìm thấy mã thông báo trong một biến được chỉ định trong <Tokens>, nhưng không phân giải được biến.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 Mã truy cập được trình bày trong yêu cầu có phạm vi không khớp với phạm vi được chỉ định trong chính sách xác minh mã truy cập. Để tìm hiểu về phạm vi, hãy xem bài viết Làm việc với các phạm vi OAuth2. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Mã truy cập do ứng dụng gửi là không hợp lệ. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Tên lỗi này được trả về khi thuộc tính <GenerateResponse> của chính sách này được đặt thành true và mã ứng dụng khách được gửi trong yêu cầu là không hợp lệ. Kiểm tra để đảm bảo bạn đang sử dụng đúng khoá ứng dụng khách và giá trị bí mật cho Ứng dụng của nhà phát triển được liên kết với proxy của bạn. Thông thường, các giá trị này được gửi dưới dạng Tiêu đề Uỷ quyền cơ bản được mã hoá Base64.

Lưu ý: Bạn nên thay đổi quy tắc lỗi hiện có để nắm bắt cả invalid_client và Tên InvalidClientIdentifier. Xem Bản phát hành 16.09.21 Ghi chú để biết thêm thông tin và ví dụ.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.invalid_request 400 Tên lỗi này được dùng cho nhiều loại lỗi, thường là lỗi thiếu hoặc thông số không chính xác được gửi trong yêu cầu. Nếu <GenerateResponse> là đặt thành false, sử dụng các biến lỗi (được mô tả bên dưới) để truy xuất thông tin chi tiết về lỗi, chẳng hạn như tên lỗi và nguyên nhân. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 Tiêu đề uỷ quyền không có từ "Bearer" bắt buộc. Cho ví dụ: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

Proxy API không có trong Sản phẩm được liên kết với mã truy cập.

Mẹo: Đảm bảo rằng sản phẩm liên kết với mã truy cập đáp ứng các yêu cầu được định cấu hình chính xác. Ví dụ: nếu bạn sử dụng ký tự đại diện trong đường dẫn tài nguyên, hãy đảm bảo ký tự đại diện đang được sử dụng đúng cách. Xem bài viết Tạo sản phẩm API để biết chi tiết.

Xem thêm bài viết này Bài đăng trên thẻ Cộng đồng Apigee để được hướng dẫn thêm về nguyên nhân gây ra lỗi này.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Tên lỗi này được trả về khi thuộc tính <GenerateResponse> của chính sách này được đặt thành false và mã ứng dụng khách được gửi trong yêu cầu là không hợp lệ. Kiểm tra để đảm bảo bạn đang sử dụng đúng khoá ứng dụng khách và giá trị bí mật cho Ứng dụng của nhà phát triển liên kết với proxy của bạn. Thông thường, các giá trị này được gửi dưới dạng Base64 tiêu đề Uỷ quyền cơ bản được mã hoá.

Lưu ý: Trong trường hợp này, lỗi này thường được gọi invalid_client. Bạn nên thay đổi quy tắc lỗi hiện tại để nắm bắt cả invalid_clientInvalidClientIdentifier tên. Xem Bản phát hành 16.09.21 Ghi chú để biết thêm thông tin và ví dụ.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 Chính sách phải chỉ định mã truy cập hoặc mã uỷ quyền, nhưng không được cả hai. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 Phần tử <Tokens>/<Token> yêu cầu bạn phải chỉ định mã thông báo (ví dụ: refreshtoken). Nếu ứng dụng chuyển sai loại, thì lỗi được gửi. ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 Loại phản hồi là token, nhưng không loại nào được chỉ định. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Khách hàng đã chỉ định một loại quyền mà chính sách không hỗ trợ (không được liệt kê trong &lt;SupportedGrantTypes&gt; phần tử).

Lưu ý: Hiện có lỗi liên quan đến lỗi loại cấp quyền không được hỗ trợ không được gửi đúng cách. Nếu xảy ra lỗi loại cấp quyền không được hỗ trợ, proxy sẽ không hãy nhập Luồng lỗi, như mong đợi.

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy có chứa chính sách này.

Tên lỗi Nguyên nhân
InvalidValueForExpiresIn

Đối với phần tử <ExpiresIn>, các giá trị hợp lệ là số nguyên dương và -1

InvalidValueForRefreshTokenExpiresIn Đối với phần tử <RefreshTokenExpiresIn>, các giá trị hợp lệ đều là số dương số nguyên và -1.
InvalidGrantType Bạn đã chỉ định loại cấp quyền không hợp lệ trong <SupportedGrantTypes> . Hãy xem tài liệu tham khảo chính sách để biết danh sách các loại hợp lệ.
ExpiresInNotApplicableForOperation Đảm bảo rằng các thao tác được quy định trong <Hoạt động> hỗ trợ phần tử hết hạn. Ví dụ: hoạt động VerifyToken không.
RefreshTokenExpiresInNotApplicableForOperation Đảm bảo rằng các thao tác được quy định trong <Hoạt động> làm mới chế độ hỗ trợ phần tử mã thông báo hết hạn. Ví dụ: hoạt động VerifyToken không.
GrantTypesNotApplicableForOperation Đảm bảo rằng các loại cấp quyền được chỉ định trong <supportedSTARTTypes> được hỗ trợ cho thao tác được chỉ định.
OperationRequired

Bạn phải chỉ định một thao tác trong chính sách này bằng <Operation> .

Lưu ý: Nếu thiếu phần tử <Operation> thì phần tử Giao diện người dùng gửi lỗi xác thực giản đồ.

InvalidOperation

Bạn phải chỉ định một thao tác hợp lệ trong chính sách này bằng cách sử dụng Phần tử <Operation>.

Lưu ý: Nếu phần tử <Operation> không hợp lệ, thì Giao diện người dùng gửi lỗi xác thực giản đồ.

TokenValueRequired Bạn phải chỉ định một giá trị <Token> của mã thông báo trong Phần tử <Tokens>.

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 Trong đó 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 = "invalid_request"
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.GenerateAccesstoken.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.GenerateAccesstoken.fault.name = invalid_request

Lưu ý: Đối với hoạt động VerifyAccessToken, tên lỗi sẽ bao gồm hậu tố sau: keymanagement.service
Ví dụ: keymanagement.service.invalid_access_token

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.GenerateAccesstoken.cause = Required param : grant_type

Ví dụ về phản hồi khi gặp lỗi

Những phản hồi này sẽ được gửi lại ứng dụng khách nếu <GenerateResponse> là phần tử true.

Nếu giá trị <GenerateResponse>true (đúng) thì chính sách sẽ trả về lỗi ở định dạng này cho các thao tác tạo mã thông báo và mã. Để xem danh sách đầy đủ, hãy xem Lỗi HTTP của OAuth tham chiếu phản hồi.

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

Nếu giá trị <GenerateResponse>true (đúng) thì chính sách sẽ trả về lỗi ở định dạng này để xác minh và xác thực thao tác. Để xem danh sách đầy đủ, hãy xem bài viết Lỗi HTTP OAuth tham chiếu phản hồi.

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

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

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Giản đồ chính sách

Mỗi loại chính sách được xác định bằng một lược đồ XML (.xsd). Để tham khảo, bạn có thể xem lược đồ chính sách trên GitHub.

Làm việc với cấu hình OAuth mặc định

Mỗi tổ chức (ngay cả tổ chức dùng thử miễn phí) trên Apigee Edge đều được cấp một điểm cuối mã thông báo OAuth. Điểm cuối được định cấu hình trước bằng các chính sách trong proxy API có tên là oauth. Bạn có thể bắt đầu sử dụng điểm cuối mã thông báo ngay khi tạo tài khoản trên Apigee Edge. Để biết thông tin chi tiết, hãy xem bài viết Tìm hiểu các điểm cuối của OAuth.

Lấy mã truy cập xoá

Theo mặc định, mã thông báo OAuth2 sẽ bị xoá khỏi hệ thống Apigee Edge sau 3 ngày (259200 giây) kể từ khi cả mã truy cập và mã làm mới (nếu có) hết hạn. Trong một số trường hợp, bạn có thể muốn thay đổi chế độ mặc định này. Ví dụ: bạn có thể muốn rút ngắn thời gian xoá để tiết kiệm dung lượng ổ đĩa nếu đang tạo một lượng lớn mã thông báo.

Nếu đang sử dụng Edge dành cho đám mây riêng tư, bạn có thể thay đổi giá trị mặc định này bằng cách đặt các thuộc tính của tổ chức như giải thích trong phần này. (Quy trình xoá mã thông báo đã hết hạn trong 3 ngày áp dụng cho Edge for Private Cloud phiên bản 4.19.01 trở lên. Đối với các phiên bản cũ, khoảng thời gian xoá mặc định là 180 ngày.)

Cập nhật chế độ cài đặt xoá sạch cho Edge Private Cloud phiên bản 4.16.01 trở lên

Lưu ý: Chỉ những mã thông báo được tạo sau khi áp dụng các chế độ cài đặt này mới bị ảnh hưởng; các chế độ cài đặt này không áp dụng cho các mã thông báo được tạo trước đó.

Cập nhật các chế độ cài đặt xoá hoàn toàn cho Edge Private Cloud 4.15.07

Lưu ý: Chỉ những mã thông báo được tạo sau khi áp dụng các chế độ cài đặt này mới bị ảnh hưởng; các chế độ cài đặt này không áp dụng cho những mã thông báo được tạo trước đó.

Hành vi không tuân thủ RFC

Chính sách OAuthV2 trả về một phản hồi mã thông báo chứa một số thuộc tính nhất định không tuân thủ RFC. Bảng sau đây cho thấy các thuộc tính không tuân thủ mà chính sách OAuthV2 trả về và các thuộc tính tuân thủ tương ứng.

OAuthV2 trả về: Thuộc tính tuân thủ RFC là:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(Giá trị tuân thủ là một số, chứ không phải một chuỗi.)

Ngoài ra, phản hồi lỗi cho mã làm mới đã hết hạn khi grant_type = refresh_token là:

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

Tuy nhiên, phản hồi tuân thủ RFC là:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

Chủ đề có liên quan