Chính sách GetOAuthV2Info

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

Nội dung

Lấy các thuộc tính của mã truy cập, mã làm mới, mã uỷ quyền và thuộc tính ứng dụng khách, đồng thời điền các biến bằng giá trị của những thuộc tính đó.

Chính sách này hữu ích khi bạn cần định cấu hình hành vi có điều kiện, linh động dựa trên một giá trị trong mã thông báo hoặc mã uỷ quyền. Bất cứ khi nào quá trình xác thực mã thông báo diễn ra, các biến sẽ tự động được điền sẵn bằng các giá trị của thuộc tính mã thông báo. Tuy nhiên, trong trường hợp chưa xác thực mã thông báo, bạn có thể sử dụng tính năng này để điền rõ ràng các biến bằng giá trị thuộc tính của mã thông báo. Xem thêm phần Tuỳ chỉnh mã thông báo và mã uỷ quyền.

Mã truy cập mà bạn truyền đến chính sách này phải hợp lệ, nếu không chính sách sẽ gửi ra lỗi invalid_access_token.

Mẫu

Các mẫu sau đây sử dụng chính sách Lấy thông tin OAuth phiên bản 2 để truy xuất thông tin về nhiều thành phần của quy trình OAuth2, sau đó truy cập vào thông tin đó trong mã.

Mã truy cập

Để tham chiếu đến mã truy cập, hãy sử dụng phần tử <AccessToken> trong chính sách của bạn.

Ví dụ sau đây dự kiến sẽ tìm thấy mã truy cập trong một tham số truy vấn có tên là "access_token" (bạn có thể tuỳ ý quyết định chi tiết triển khai thực tế):

<GetOAuthV2Info name="MyTokenAttrsPolicy">
  <AccessToken ref="request.queryparam.access_token"></AccessToken>
</GetOAuthV2Info>

Với mã truy cập, chính sách sẽ tra cứu hồ sơ của mã thông báo và điền sẵn một tập hợp các biến bằng dữ liệu hồ sơ.

Sau đó, bạn có thể truy cập vào các biến này bằng JavaScript hoặc một phương tiện khác. Ví dụ sau đây truy xuất(các) phạm vi được liên kết với mã truy cập bằng JavaScript:

var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');

Xin lưu ý rằng để truy cập vào các biến đó trong mã, bạn phải thêm tiền tố "oauthv2accesstoken" vào các biến đó. Để xem danh sách đầy đủ các biến có sẵn thông qua mã truy cập, hãy xem Các biến mã truy cập.

Mã xác thực

Để nhận các thuộc tính mã uỷ quyền, hãy dùng phần tử <AuthorizationCode> trong chính sách của bạn.

Ví dụ sau đây dự kiến sẽ tìm thấy mã truy cập trong một tham số biểu mẫu có tên là "code" (bạn có thể tự quyết định chi tiết triển khai thực tế):

<GetOAuthV2Info name="MyAuthCodeAttrsPolicy">
  <AuthorizationCode ref="request.formparam.code"></AuthorizationCode>
</GetOAuthV2Info>

Với mã uỷ quyền, chính sách sẽ tra cứu thông tin của mã và điền sẵn một tập hợp các biến bằng dữ liệu mã uỷ quyền.

Sau đó, bạn có thể truy cập vào các biến này bằng JavaScript hoặc một phương tiện khác. Ví dụ sau đây truy xuất một thuộc tính tuỳ chỉnh được liên kết với mã uỷ quyền bằng JavaScript:

var attr = context.getVariable(oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name);

Xin lưu ý rằng để truy cập vào các biến đó trong mã, bạn phải thêm tiền tố "oauthv2authcode" vào các biến đó. Để xem danh sách đầy đủ các biến có sẵn thông qua mã uỷ quyền, hãy xem phần Các biến mã uỷ quyền.

Mã làm mới

Để nhận các thuộc tính mã làm mới, hãy sử dụng phần tử <RefreshToken> trong chính sách của bạn.

Ví dụ sau đây dự kiến sẽ tìm thấy mã truy cập trong một tham số truy vấn có tên là "refresh_token" (bạn có thể tuỳ ý quyết định chi tiết triển khai thực tế):

<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy">
  <RefreshToken ref="request.queryparam.refresh_token"/>
</GetOAuthV2Info>

Với mã làm mới, chính sách sẽ tra cứu thông tin của mã làm mới và điền sẵn một tập hợp các biến bằng dữ liệu mã làm mới.

Sau đó, bạn có thể truy cập vào các biến đó bằng JavaScript hoặc một phương tiện khác. Ví dụ sau đây truy xuất một thuộc tính tuỳ chỉnh được liên kết với mã làm mới bằng JavaScript:

var attr = context.getVariable(oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name);

Xin lưu ý rằng để truy cập vào các biến trong mã, bạn phải thêm tiền tố "oauthv2refreshtoken" vào các biến đó. Để xem danh sách đầy đủ các biến có sẵn thông qua mã làm mới, hãy xem phần Các biến mã làm mới.

Tĩnh

Trong một số ít trường hợp, bạn có thể cần lấy hồ sơ của một mã thông báo được định cấu hình tĩnh (mã thông báo không truy cập được thông qua một biến). Bạn có thể thực hiện việc này bằng cách cung cấp giá trị của mã truy cập dưới dạng một phần tử.

<GetOAuthV2Info name="GetTokenAttributes">
  <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken>
</GetOAuthV2Info>

Bạn cũng có thể làm việc này với tất cả các loại mã thông báo khác (mã ứng dụng khách, mã uỷ quyền và mã thông báo làm mới).

ID khách hàng

Ví dụ này cho thấy cách truy xuất thông tin về ứng dụng khách bằng mã ứng dụng khách. Khi thực thi, chính sách sẽ điền một tập hợp các biến bằng thông tin về ứng dụng. Trong trường hợp này, chính sách dự kiến sẽ tìm thấy mã ứng dụng khách trong một tham số truy vấn có tên là client_id. Với mã nhận dạng ứng dụng khách, chính sách sẽ tra cứu hồ sơ của ứng dụng khách và điền một tập hợp các biến bằng dữ liệu hồ sơ. Các biến sẽ có tiền tố oauthv2client.

<GetOAuthV2Info name="GetClientAttributes">
  <ClientId ref="request.queryparam.client_id"></ClientId>
</GetOAuthV2Info>

Sau đó, bạn có thể truy cập vào các biến này bằng JavaScript hoặc một phương tiện khác. Ví dụ: để lấy tên ứng dụng và email của nhà phát triển được liên kết với ứng dụng khách bằng JavaScript:

context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1"
    <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
    <AccessToken ref="variable"></AccessToken>
    <AuthorizationCode ref="variable"></AuthorizationCode>
    <ClientId ref="variable"></ClientId>
    <RefreshToken ref="variable"></RefreshToken>
</GetOAuthV2Info>

Thuộc tính <GetOAuthV2Info>

<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">

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>

Truy xuất hồ sơ cho mã truy cập. Bạn truyền vào một biến chứa chuỗi mã thông báo truy cập hoặc một chuỗi mã thông báo theo nghĩa đen (trường hợp hiếm gặp). Trong ví dụ này, mã truy cập được truy xuất từ một tham số truy vấn được truyền trong một yêu cầu. Sử dụng phần tử <IgnoreAccessTokenStatus> nếu bạn muốn trả về thông tin cho mã thông báo đã bị thu hồi hoặc hết hạn.

<AccessToken ref="request.queryparam.access_token"></AccessToken>

Mặc định:

request.formparam.access_token (một 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ệ:

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


Phần tử <AuthorizationCode>

Truy xuất hồ sơ cho một mã uỷ quyền. Bạn truyền vào một biến chứa chuỗi mã xác thực hoặc một chuỗi mã thông báo theo nghĩa đen (trường hợp hiếm gặp). Trong ví dụ này, mã uỷ quyền được truy xuất từ một tham số truy vấn được truyền trong một yêu cầu. Để xem danh sách các biến được điền sẵn bằng thao tác này, hãy xem phần "Biến luồng".

<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>

Mặc định:

request.formparam.access_token (một 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ệ:

Một biến luồng chứa chuỗi mã uỷ quyền hoặc một chuỗi cố định.

Phần tử <ClientId>

Truy xuất thông tin liên quan đến một mã khách hàng. Trong ví dụ này, mã ứng dụng khách được truy xuất từ một tham số truy vấn được truyền trong một yêu cầu. Để xem danh sách các biến được điền sẵn bằng thao tác này, hãy xem phần "Biến luồng".

<ClientId ref="request.queryparam.client_id"></ClientId>

Mặc định:

request.formparam.access_token (một 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ệ: Một biến luồng chứa chuỗi mã uỷ quyền hoặc một chuỗi cố định.

Phần tử <IgnoreAccessTokenStatus>

Trả về thông tin mã thông báo ngay cả khi mã thông báo đã hết hạn hoặc bị thu hồi. Bạn chỉ có thể dùng phần tử này với mã truy cập. Thông tin cho các thực thể khác như mã làm mới và mã uỷ quyền sẽ được trả về bất kể trạng thái của chúng theo mặc định.

<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>

Mặc định:

false

Sự hiện diện:

Không bắt buộc

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

Phần tử <RefreshToken>

Truy xuất hồ sơ cho mã làm mới. Bạn truyền vào một biến chứa chuỗi mã làm mới hoặc một chuỗi mã cố định (trường hợp hiếm gặp). Trong ví dụ này, mã làm mới được truy xuất từ một tham số truy vấn được truyền trong một yêu cầu. Để xem danh sách các biến được điền sẵn bằng thao tác này, hãy xem phần "Biến luồng".

<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>

Mặc định:

request.formparam.access_token (một 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ệ:

Là một biến luồng chứa chuỗi mã làm mới hoặc một chuỗi cố định.

Biến của quy trình

Chính sách GetOAuthV2Info sẽ điền sẵn các biến này và thường được dùng trong trường hợp bạn cần dữ liệu hồ sơ, nhưng chưa có hoạt động cấp hoặc xác thực nào diễn ra. .

Biến mã ứng dụng khách

Các biến này được điền sẵn khi phần tử ClientId được đặt:

oauthv2client.{policy_name}.client_id
oauthv2client.{policy_name}.client_secret
oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris'
oauthv2client.{policy_name}.developer.email
oauthv2client.{policy_name}.developer.app.name
oauthv2client.{policy_name}.developer.id
oauthv2client.{policy_name}.{developer_app_custom_attribute_name}

Biến mã truy cập

Các biến này được điền sẵn khi phần tử AccessToken được đặt:

oauthv2accesstoken.{policy_name}.developer.id
oauthv2accesstoken.{policy_name}.developer.app.name
oauthv2accesstoken.{policy_name}.developer.app.id
oauthv2accesstoken.{policy_name}.developer.email

oauthv2accesstoken.{policy_name}.organization_name
oauthv2accesstoken.{policy_name}.api_product_list

oauthv2accesstoken.{policy_name}.access_token
oauthv2accesstoken.{policy_name}.scope
oauthv2accesstoken.{policy_name}.expires_in //in seconds
oauthv2accesstoken.{policy_name}.status
oauthv2accesstoken.{policy_name}.client_id
oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name}

oauthv2accesstoken.{policy_name}.refresh_token
oauthv2accesstoken.{policy_name}.refresh_token_status
oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds

oauthv2accesstoken.{policy_name}.refresh_count
oauthv2accesstoken.{policy_name}.refresh_token_issued_at
oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED

Biến mã uỷ quyền

Các biến này được điền sẵn khi phần tử AuthorizationCode được đặt:

oauthv2authcode.{policy_name}.code
oauthv2authcode.{policy_name}.scope
oauthv2authcode.{policy_name}.redirect_uri
oauthv2authcode.{policy_name}.client_id
oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}

Làm mới các biến mã thông báo

Các biến này được điền khi phần tử RefreshToken được đặt:

oauthv2refreshtoken.{policy_name}.developer.id
oauthv2refreshtoken.{policy_name}.developer.app.name
oauthv2refreshtoken.{policy_name}.developer.app.id
oauthv2refreshtoken.{policy_name}.developer.email
oauthv2refreshtoken.{policy_name}.organization_name
oauthv2refreshtoken.{policy_name}.api_product_list

oauthv2refreshtoken.{policy_name}.access_token
oauthv2refreshtoken.{policy_name}.scope
oauthv2refreshtoken.{policy_name}.expires_in //in seconds

oauthv2refreshtoken.{policy_name}.status
oauthv2refreshtoken.{policy_name}.client_id
oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name}

oauthv2refreshtoken.{policy_name}.refresh_token
oauthv2refreshtoken.{policy_name}.refresh_token_status
oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds

oauthv2refreshtoken.{policy_name}.refresh_count
oauthv2refreshtoken.{policy_name}.refresh_token_issued_at
oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED

Lược đồ

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.

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 đặ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áchCách xử 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. Tên lỗi được hiển thị bên dưới là các chuỗi được gán cho biến fault.name khi xảy ra lỗi. Xem lỗi về biến 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.access_token_expired 500 Mã truy cập được gửi đến chính sách đã hết hạn.
steps.oauth.v2.authorization_code_expired 500 Mã uỷ quyền được gửi đến chính sách đã hết hạn.
steps.oauth.v2.invalid_access_token 500 Mã truy cập được gửi đến chính sách là không hợp lệ.
steps.oauth.v2.invalid_client-invalid_client_id 500 Mã ứng dụng khách được gửi đến chính sách không hợp lệ.
steps.oauth.v2.invalid_refresh_token 500 Mã làm mới được gửi đến chính sách không hợp lệ.
steps.oauth.v2.invalid_request-authorization_code_invalid 500 Mã uỷ quyền được gửi đến chính sách này không hợp lệ.
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401 Vui lòng xem bài đăng này trên thẻ Cộng đồng Apigee để biết thông tin về cách khắc phục lỗi này.
steps.oauth.v2.refresh_token_expired 500 Mã làm mới được gửi đến chính sách đã hết hạn.

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ề các 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 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 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 khi gặp lỗi

{  
   "fault":{  
      "faultstring":"ClientId is Invalid",
      "detail":{  
         "errorcode":"keymanagement.service.invalid_client-invalid_client_id"
      }
   }
}

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

<FaultRule name="OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientIdResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>

Chủ đề có liên quan