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
Lấy các thuộc tính của mã truy cập, mã làm mới, mã uỷ quyền và ứng dụng và điền giá trị của các thuộc tính đó vào biến.
Chính sách này hữu ích khi bạn cần định cấu hình hành vi linh động, có điều kiện 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 quy trình xác thực mã thông báo xảy ra, các biến sẽ tự động được điền sẵn bằng các giá trị của các thuộc tính mã thông báo. Tuy nhiên, trong trường hợp không xác thực được mã thông báo, bạn có thể sử dụng tính năng này để điền các biến bằng các giá trị thuộc tính của một mã thông báo một cách rõ ràng. Xem thêm Tuỳ chỉnh mã thông báo và Mã uỷ quyền.
Mã truy cập mà bạn chuyển đến chính sách này phải hợp lệ, nếu không chính sách sẽ gửi một
invalid_access_token
lỗi.
Mẫu
Các mẫu sau sử dụng chính sách Nhận thông tin OAuth V2 để truy xuất thông tin về nhiều loại của quy trình OAuth2 rồi truy cập vào thông tin đó trong mã.
Mã truy cập
Để tham chiếu đến một 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 mã truy cập trong một tham số truy vấn có tên "access_token" (thông tin triển khai thực tế tuỳ thuộc vào bạn):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Với mã truy cập, chính sách này sẽ tra cứu hồ sơ của mã thông báo và điền một tập hợp với dữ liệu hồ sơ.
Sau đó, bạn có thể truy cập vào các biến bằng cách sử dụng JavaScript hoặc 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');
Lưu ý rằng để truy cập vào các biến đó trong mã, bạn phải thêm tiền tố vào chúng " OAuthv2accesstoken". Để xem danh sách đầy đủ các biến được cung cấp thông qua mã truy cập, hãy xem Các biến mã thông báo truy cập.
Mã xác thực
Để xem các thuộc tính mã uỷ quyền, hãy sử dụng <AuthorizationCode>
trong chính sách của mình.
Ví dụ sau đây yêu cầu tìm mã truy cập trong một biểu mẫu thông số có tên là "code" (thông tin triển khai thực tế tuỳ thuộc vào bạn):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
Với mã xác thực, chính sách tra cứu thông tin của mã và điền một tập hợp các biến có dữ liệu mã xác thực.
Sau đó, bạn có thể truy cập vào các biến bằng cách sử dụng JavaScript hoặc phương tiện khác. Ví dụ sau đây truy xuấ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’);
Lưu ý rằng để truy cập các biến đó trong mã, bạn phải thêm tiền tố "oauthv2authcode". Để biết danh sách đầy đủ các biến có sẵn thông qua mã xác thực, hãy xem Biến mã uỷ quyền.
Làm mới mã thông báo
Để nhận các thuộc tính mã làm mới, hãy sử dụng phần tử <RefreshToken>
trong
.
Ví dụ sau đây dự kiến sẽ tìm mã truy cập trong một tham số truy vấn có tên "refresh_token" (thông tin triển khai thực tế tuỳ thuộc vào bạn):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
Với mã làm mới, chính sách này 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 có 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 phương tiện khác. Nội dung sau đây Ví dụ này sẽ truy xuấ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’);
Lưu ý rằng để truy cập vào các biến trong mã, bạn phải thêm tiền tố vào các biến đó " OAuthv2refreshtoken". Để xem danh sách đầy đủ các biến được cung cấp qua mã làm mới, hãy xem Làm mới các biến mã thông báo.
Tĩnh
Trong một số ít trường hợp, bạn có thể cần phải lấy hồ sơ của mã thông báo được định cấu hình tĩnh (một không thể truy cập 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 thuộc tính mã truy cập dưới dạng phần tử.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Bạn có thể thực hiện 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.v.) mã thông báo).
Client ID
Ví dụ này cho thấy cách truy xuất thông tin về ứng dụng bằng mã ứng dụng khách.
Sau khi thực thi, chính sách này sẽ điền thông tin ứng dụng vào một nhóm biến. Trong phần này
chính sách này sẽ tìm ra mã ứng dụng khách trong tham số truy vấn
có tên là client_id
. Với mã ứng dụng khách, chính sách này tra cứu thông tin
profile và điền sẵn dữ liệu hồ sơ cho một tập hợp các biến. Các biến sẽ là
có tiền tố là 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 bằng cách sử dụng JavaScript hoặc phương tiện khác. Ví dụ: để có được tên ứng dụng của nhà phát triển và email của nhà phát triển được liên kết với ứng dụng khách đang sử dụng JavaScript:
context.getVariable("oauthv2client.GetClientAttributes.developer.email"); context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");
Tham chiếu phần tử
Thông tin tham chiếu 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>
<GetOAuthV2Info> thuộc tính
<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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thành |
đú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 |
<DisplayName> 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 |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<AccessToken> phần tử
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ã truy cập hoặc chuỗi mã thông báo bằng chữ (trường hợp hiếm). Trong ví dụ này, mã truy cập là truy xuất từ một tham số truy vấn được truyền trong yêu cầu. Sử dụng <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-urlcoded và được chỉ định trong yêu cầu nội dung) |
Sự hiện diện: |
Không bắt buộc |
Loại: | Chuỗi |
Giá trị hợp lệ: |
Biến flow chứa một chuỗi mã truy cập hoặc một chuỗi bằng chữ. |
<AuthorizationCode> phần tử
Truy xuất hồ sơ để biế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 chuỗi mã thông báo bằng chữ (trường hợp hiếm). Trong ví dụ này, mã xác thực là truy xuất từ một tham số truy vấn được truyền trong yêu cầu. Để có danh sách các biến được điền bằng hàm này hãy xem "Biến luồng".
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
Mặc định: |
request.formparam.access_token (một x-www-form-urlcoded và được chỉ định trong yêu cầu nội dung) |
Sự hiện diện: |
Không bắt buộc |
Loại: | Chuỗi |
Giá trị hợp lệ: |
Biến luồng chứa một chuỗi mã xác thực hoặc một chuỗi bằng chữ. |
<ClientId> phần tử
Truy xuất thông tin liên quan đến mã ứng dụng khách. Trong ví dụ này, mã ứng dụng khách được truy xuất từ một tham số truy vấn được chuyển trong một yêu cầu. Để có danh sách các biến được điền bằng toán tử này, hãy xem bài viết "Biến luồng".
<ClientId ref="request.queryparam.client_id"></ClientId>
Mặc định: |
request.formparam.access_token (một x-www-form-urlcoded và được chỉ định trong yêu cầu nội dung) |
Sự hiện diện: |
Không bắt buộc |
Loại: | Chuỗi |
Giá trị hợp lệ: | Biến luồng chứa một chuỗi mã xác thực hoặc một chuỗi bằng chữ. |
<IgnoreAccessTokenStatus> phần tử
Trả về thông tin về mã thông báo ngay cả khi mã thông báo đã hết hạn hoặc bị thu hồi. Phần tử này chỉ có thể để sử dụng với mã truy cập. Thông tin cho các thực thể khác như mã làm mới và lệnh uỷ quyền theo mặc định, mã được trả về bất kể trạng thái của chúng.
<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ệ: | đúng hoặc sai |
<RefreshToken> phần tử
Truy xuất hồ sơ để có 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 chuỗi mã thông báo bằng chữ (trường hợp hiếm). Trong ví dụ này, mã làm mới là truy xuất từ một tham số truy vấn được truyền trong yêu cầu. Để có danh sách các biến được điền bằng hàm này hãy xem "Biến luồng".
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
Mặc định: |
request.formparam.access_token (một x-www-form-urlcoded và được chỉ định trong yêu cầu nội dung) |
Sự hiện diện: |
Không bắt buộc |
Loại: | Chuỗi |
Giá trị hợp lệ: |
Biến luồng chứa chuỗi mã thông báo làm mới hoặc chuỗi bằng chữ. |
Biến luồng
Chính sách GetOAuthV2Info điền các biến này và thường được sử dụng trong trường hợp bạn cần dữ liệu hồ sơ, nhưng chưa xảy ra việc cấp hoặc xác thực. .
Biến mã ứng dụng khách
Các biến này được điền sẵn khi bạn đặt phần tử ClientId:
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}
Truy cập vào các biến mã thông báo
Các biến sau được điền sẵn khi bạn đặt phần tử AccessToken:
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 bạn đặt phần tử Uỷ quyền:
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 sau được điền sẵn khi bạn đặt phần tử RefreshToken:
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 giản đồ XML (.xsd
). Giản đồ chính sách để tham khảo
đều có trên GitHub.
Tham chiếu lỗi
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes. The error names shown below are the strings
that are assigned to the fault.name
variable when an error occurs. See the Fault
variables section below for more details.
Fault code | HTTP status | Cause |
---|---|---|
steps.oauth.v2.access_token_expired |
500 | The access token sent to the policy is expired. |
steps.oauth.v2.authorization_code_expired |
500 | The authorization code sent to the policy is expired. |
steps.oauth.v2.invalid_access_token |
500 | The access token sent to the policy is invalid. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | The client ID sent to the policy is invalid. |
steps.oauth.v2.invalid_refresh_token |
500 | The refresh token sent to the policy is invalid. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | The authorization code sent to the policy is invalid. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Please see this Apigee Community post for information about troubleshooting this error. |
steps.oauth.v2.refresh_token_expired |
500 | The refresh token sent to the policy is expired. |
Deployment errors
Refer to the message reported in the UI for information about deployment errors.
Fault variables
These variables are set when this policy triggers an error at runtime.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Example error response
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Example fault rule
<FaultRule name="OAuthV2 Faults"> <Step> <Name>AM-InvalidClientIdResponse</Name> </Step> <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition> </FaultRule>