Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X. info
Nội dung
Chính sách Xác minh khoá API cho phép bạn thực thi quy trình xác minh khoá API trong thời gian chạy, chỉ cho phép các ứng dụng có khoá API đã được phê duyệt truy cập vào API của bạn. Chính sách này đảm bảo rằng các khoá API đều hợp lệ, chưa bị thu hồi và được phê duyệt để sử dụng các tài nguyên cụ thể liên kết với các sản phẩm API của bạn.
Mẫu
Khoá trong tham số truy vấn
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.queryparam.apikey" />
</VerifyAPIKey>Trong ví dụ này, chính sách dự kiến sẽ tìm thấy khoá API trong một biến luồng có tên là request.queryparam.apikey. Biến request.queryparam.{name} là một biến luồng tiêu chuẩn của Edge, được điền sẵn giá trị của một tham số truy vấn được truyền trong yêu cầu của ứng dụng.
Lệnh curl sau đây sẽ truyền khoá API trong một tham số truy vấn:
curl http://myorg-test.apigee.net/mocktarget?apikey=IEYRtW2cb7A5Gs54A1wKElECBL65GVls
Khoá trong tiêu đề
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.header.x-apikey" />
</VerifyAPIKey>Trong ví dụ này, chính sách dự kiến sẽ tìm thấy khoá API trong một biến luồng có tên là request.header.x-apikey. Biến request.header.{name} là một biến luồng Edge tiêu chuẩn được điền sẵn giá trị của tiêu đề được truyền trong yêu cầu của ứng dụng.
cURL sau đây cho biết cách truyền khoá API trong tiêu đề:
curl "http://myorg-test.apigee.net/mocktarget" -H "x-apikey:IEYRtW2cb7A5Gs54A1wKElECBL65GVls"
Khoá trong biến
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="requestAPIKey.key"/>
</VerifyAPIKey>Chính sách này có thể tham chiếu đến bất kỳ biến nào chứa khoá. Chính sách trong ví dụ này trích xuất khoá API từ một biến có tên là requestAPIKey.key.
Cách điền sẵn biến đó là tuỳ vào bạn. Ví dụ: bạn có thể sử dụng chính sách Trích xuất biến để điền requestAPIKey.key từ một tham số truy vấn có tên là myKey, như minh hoạ bên dưới:
<ExtractVariables async="false" continueOnError="false" enabled="true" name="SetAPIKeyVar">
<Source>request</Source>
<QueryParam name="myKey">
<Pattern ignoreCase="true">{key}</Pattern>
</QueryParam>
<VariablePrefix>requestAPIKey</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>Các biến trong quy trình thực thi chính sách truy cập
<AssignMessage async="false" continueOnError="false" enabled="true" name="accessverifyvars"> <AssignVariable> <Name>devFirstName</Name> <Ref>verifyapikey.verify-api-key.developer.firstName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devLastName</Name> <Ref>verifyapikey.verify-api-key.developer.lastName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devEmail</Name> <Ref>verifyapikey.verify-api-key.developer.email</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Edge tự động điền một tập hợp các biến luồng khi thực thi chính sách Xác minh khoá API cho một khoá API hợp lệ. Bạn có thể sử dụng các biến này để truy cập vào thông tin như tên ứng dụng, mã ứng dụng và thông tin về nhà phát triển hoặc công ty đã đăng ký ứng dụng. Trong ví dụ trên, bạn sử dụng chính sách Assign Message để truy cập vào họ, tên và địa chỉ email của nhà phát triển sau khi Verify API Key thực thi.
Tất cả các biến này đều có tiền tố:
verifyapikey.{policy_name}Trong ví dụ này, tên chính sách Khoá API xác minh là "verify-api-key". Do đó, bạn tham chiếu tên của nhà phát triển đưa ra yêu cầu bằng cách truy cập vào biến verifyapikey.verify-api-key.developer.firstName.
Tìm hiểu về Edge
Giới thiệu về chính sách Xác minh khoá API
Khi nhà phát triển đăng ký một ứng dụng trên Edge, Edge sẽ tự động tạo một cặp khoá người dùng và khoá bí mật. Bạn có thể xem cặp khoá và bí mật của người dùng ứng dụng trong Giao diện người dùng Edge hoặc truy cập vào cặp khoá và bí mật đó từ API Edge.
Tại thời điểm đăng ký ứng dụng, nhà phát triển sẽ chọn một hoặc nhiều sản phẩm API để liên kết với ứng dụng. Trong đó, sản phẩm API là một tập hợp tài nguyên có thể truy cập thông qua các proxy API. Sau đó, nhà phát triển sẽ truyền khoá API (khoá người dùng) trong mỗi yêu cầu đến một API trong sản phẩm API được liên kết với ứng dụng. Hãy xem phần Tổng quan về việc xuất bản để biết thêm thông tin.
Bạn có thể dùng khoá API làm mã thông báo xác thực hoặc dùng để lấy mã truy cập OAuth. Trong OAuth, khoá API được gọi là "mã ứng dụng". Bạn có thể sử dụng hai tên này thay thế cho nhau. Hãy xem Trang chủ OAuth để biết thêm thông tin.
Edge sẽ tự động điền một tập hợp các biến luồng khi thực thi chính sách Xác minh khoá API. Hãy xem Các biến của quy trình bên dưới để biết thêm thông tin.
Tham chiếu phần tử
Sau đây là các phần tử và thuộc tính mà bạn có thể định cấu hình trên chính sách này:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1"> <DisplayName>Custom label used in UI</DisplayName> <APIKey ref="variable_containing_api_key"/> </VerifyAPIKey>
Thuộc tính <VerifyAPIKey>
Ví dụ sau đây cho thấy các thuộc tính trên thẻ <VerifyAPIKey>:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-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 |
Phần tử <APIKey>
Phần tử này chỉ định biến luồng chứa khoá API. Thông thường, ứng dụng sẽ gửi khoá API trong một tham số truy vấn, tiêu đề HTTP hoặc tham số biểu mẫu. Ví dụ: nếu khoá được gửi trong một tiêu đề có tên là x-apikey, thì khoá sẽ nằm trong biến: request.header.x-apikey
| Mặc định | NA |
|---|---|
| Sự hiện diện | Bắt buộc |
| Loại | Chuỗi |
Thuộc tính
Bảng sau đây mô tả các thuộc tính của phần tử <APIKey>
| Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
|---|---|---|---|
| ref |
Một tham chiếu đến biến chứa khoá API. Mỗi chính sách chỉ được phép có một vị trí. |
Không áp dụng | Bắt buộc |
Ví dụ
Trong các ví dụ này, khoá được truyền trong các tham số và một tiêu đề có tên là x-apikey.
Dưới dạng tham số truy vấn:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.queryparam.x-apikey"/>
</VerifyAPIKey>Dưới dạng tiêu đề HTTP:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.header.x-apikey"/>
</VerifyAPIKey>Dưới dạng tham số biểu mẫu HTTP:
<VerifyAPIKey name="APIKeyVerifier">
<APIKey ref="request.formparam.x-apikey"/>
</VerifyAPIKey>Giản đồ
Biến luồng
Khi chính sách Xác minh khoá API được thực thi trên một khoá API hợp lệ, Edge sẽ điền sẵn một tập hợp các biến luồng. Các biến này có sẵn cho các chính sách hoặc mã được thực thi sau trong luồng và thường được dùng để thực hiện quy trình xử lý tuỳ chỉnh dựa trên các thuộc tính của khoá API, chẳng hạn như tên ứng dụng, sản phẩm API dùng để uỷ quyền khoá hoặc các thuộc tính tuỳ chỉnh của khoá API.
Chính sách này điền sẵn một số loại biến luồng, bao gồm:
- Giải pháp chung
- Ứng dụng
- Nhà phát triển
- Công ty
- Số liệu phân tích
Mỗi loại biến luồng có một tiền tố riêng. Tất cả các biến đều là vô hướng, ngoại trừ những biến được chỉ định cụ thể là mảng.
Biến quy trình chung
Bảng sau đây liệt kê các biến luồng chung do chính sách Xác minh khoá API điền sẵn. Tất cả các biến này đều có tiền tố:
verifyapikey.{policy_name}Ví dụ: verifyapikey.{policy_name}.client_id
Các biến có sẵn bao gồm:
| Biến | Mô tả |
|---|---|
client_id |
Khoá người dùng (còn gọi là khoá API hoặc khoá ứng dụng) do ứng dụng yêu cầu cung cấp. |
client_secret |
Khoá bí mật của người dùng được liên kết với khoá của người dùng. |
redirection_uris |
Mọi URI chuyển hướng trong yêu cầu. |
developer.app.id |
Mã nhận dạng của ứng dụng nhà phát triển đưa ra yêu cầu. |
developer.app.name |
Tên ứng dụng của ứng dụng nhà phát triển đưa ra yêu cầu. |
developer.id |
Mã nhận dạng của nhà phát triển đã đăng ký làm chủ sở hữu của ứng dụng yêu cầu. |
developer.{custom_attrib_name} |
Mọi thuộc tính tuỳ chỉnh bắt nguồn từ hồ sơ khoá ứng dụng |
DisplayName |
Giá trị của thuộc tính <DisplayName> trong chính sách. |
failed |
Đặt thành "true" khi quá trình xác thực Khoá API không thành công. |
{custom_app_attrib} |
Mọi thuộc tính tuỳ chỉnh bắt nguồn từ hồ sơ ứng dụng. Chỉ định tên của thuộc tính tuỳ chỉnh. |
apiproduct.name* |
Tên của sản phẩm API dùng để xác thực yêu cầu. |
apiproduct.{custom_attrib_name}* |
Mọi thuộc tính tuỳ chỉnh bắt nguồn từ hồ sơ sản phẩm API. |
apiproduct.developer.quota.limit* |
Hạn mức được đặt trên sản phẩm API (nếu có). |
apiproduct.developer.quota.interval* |
Khoảng thời gian hạn mức được đặt trên sản phẩm API, nếu có. |
apiproduct.developer.quota.timeunit* |
Đơn vị thời gian hạn mức được đặt trên sản phẩm API (nếu có). |
* Các biến sản phẩm API sẽ được tự động điền sẵn nếu các sản phẩm API được định cấu hình bằng môi trường, proxy và tài nguyên hợp lệ (xuất phát từ proxy.pathsuffix). Để biết hướng dẫn về cách thiết lập sản phẩm API, hãy xem phần Sử dụng API quản lý Edge để xuất bản API. |
|
Biến luồng ứng dụng
Chính sách sẽ điền sẵn các biến luồng sau đây chứa thông tin về ứng dụng. Tất cả các biến này đều có tiền tố:
verifyapikey.{policy_name}.app.
Ví dụ:
verifyapikey.{policy_name}.app.name
Các biến có sẵn bao gồm:
| Biến | Mô tả |
|---|---|
name |
Tên ứng dụng. |
id |
Mã nhận dạng của ứng dụng. |
accessType |
Không được Apigee sử dụng. |
callbackUrl |
URL gọi lại của ứng dụng. Thường chỉ dùng cho OAuth. |
DisplayName |
Tên hiển thị của ứng dụng. |
status |
Trạng thái của ứng dụng, chẳng hạn như "đã phê duyệt" hoặc "đã thu hồi". |
apiproducts |
Một mảng chứa danh sách các sản phẩm API được liên kết với ứng dụng. |
appFamily |
Mọi nhóm ứng dụng có chứa ứng dụng này hoặc "mặc định". |
appParentStatus |
Trạng thái của ứng dụng mẹ, chẳng hạn như "đang hoạt động" hoặc "không hoạt động" |
appType |
Loại ứng dụng, là "Công ty" hoặc "Nhà phát triển". |
appParentId |
Mã nhận dạng của ứng dụng mẹ. |
created_at |
Dấu thời gian cho biết ngày/giờ tạo ứng dụng. |
created_by |
Địa chỉ email của nhà phát triển đã tạo ứng dụng. |
last_modified_at |
Dấu thời gian ngày/giờ khi ứng dụng được cập nhật lần gần đây nhất. |
last_modified_by |
Địa chỉ email của nhà phát triển đã cập nhật ứng dụng gần đây nhất. |
{app_custom_attributes} |
Mọi thuộc tính tuỳ chỉnh của ứng dụng. Chỉ định tên của thuộc tính tuỳ chỉnh. |
Biến luồng của nhà phát triển
Chính sách sẽ điền sẵn các biến luồng sau đây chứa thông tin về nhà phát triển. Tất cả các biến này đều có tiền tố:
verifyapikey.{policy_name}.developerVí dụ:
verifyapikey.{policy_name}.developer.id
Các biến có sẵn bao gồm:
| Biến | Mô tả |
|---|---|
id |
Trả về {org_name}@@@{developer_id} |
userName |
Tên người dùng của nhà phát triển. |
firstName |
Tên của nhà phát triển. |
lastName |
Họ của nhà phát triển. |
email |
Địa chỉ email của nhà phát triển. |
status |
Trạng thái của nhà phát triển, có thể là active, inactive hoặc login_lock. |
apps |
Một mảng các ứng dụng được liên kết với nhà phát triển. |
created_at |
Dấu thời gian cho biết ngày/giờ tạo nhà phát triển. |
created_by |
Địa chỉ email của người dùng đã tạo nhà phát triển. |
last_modified_at |
Dấu thời gian cho biết ngày/giờ nhà phát triển được sửa đổi lần gần đây nhất. |
last_modified_by |
Địa chỉ email của người dùng đã sửa đổi nhà phát triển. |
{developer_custom_attributes} |
Mọi thuộc tính tuỳ chỉnh của nhà phát triển. Chỉ định tên của thuộc tính tuỳ chỉnh. |
Company |
Tên của công ty (nếu có) liên kết với nhà phát triển. |
Biến luồng công ty
Các biến luồng sau đây chứa thông tin về công ty do chính sách điền sẵn. Tất cả các biến này đều có tiền tố:
verifyapikey.{policy_name}.companyVí dụ:
verifyapikey.{policy_name}.company.nameCác biến có sẵn bao gồm:
| Biến | Mô tả |
|---|---|
name |
Tên công ty. |
displayName |
Tên hiển thị của công ty. |
id |
Mã công ty. |
apps |
Một mảng chứa danh sách các ứng dụng của công ty. |
appOwnerStatus |
Trạng thái của chủ sở hữu ứng dụng, có thể là active, inactive hoặc login_lock.
|
created_at |
Dấu thời gian cho biết ngày/giờ tạo công ty. |
created_by |
Địa chỉ email của người dùng đã tạo công ty. |
last_modified_at |
Dấu thời gian/ngày khi công ty được sửa đổi lần gần đây nhất. |
last_modified_by |
Địa chỉ email của người dùng đã sửa đổi công ty lần gần nhất. |
{company_custom_attributes} |
Mọi thuộc tính tuỳ chỉnh của công ty. Chỉ định tên của thuộc tính tuỳ chỉnh. |
Các biến Analytics
Các biến sau sẽ tự động được điền sẵn trong Analytics khi chính sách Xác minh khoá API được thực thi cho một khoá API hợp lệ. Các biến này chỉ được điền sẵn bởi chính sách Xác minh khoá API và các chính sách OAuth.
Bạn có thể sử dụng các biến và giá trị này làm phương diện để tạo báo cáo Analytics nhằm nắm được thông tin về các mẫu sử dụng của nhà phát triển và ứng dụng.
- apiproduct.name
- developer.app.name
- client_id
- developer.id
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.
| Fault code | HTTP status | Cause |
|---|---|---|
keymanagement.service.CompanyStatusNotActive |
401 | The Company associated with the Developer App that has the API key you are using has an inactive status. When a Company's status is set to inactive, you cannot access the developers or apps associated with that Company. An org admin can change a Company's status using the management API. See Set the Status of a Company. |
keymanagement.service.DeveloperStatusNotActive |
401 |
The developer who created the Developer App that has the API key you are using has an inactive status. When an App Developer's status is set to inactive, any Developer Apps created by that developer are deactivated. An admin user with appropriate permissions (such as Organization Administrator) can change a developer's status in the following ways:
|
keymanagement.service.invalid_client-app_not_approved |
401 | The Developer App associated with the API key is revoked. A revoked app cannot access any API products and cannot invoke any API managed by Apigee Edge. An org admin can change the status of a Developer App using the management API. See Approve or Revoke Developer App. |
oauth.v2.FailedToResolveAPIKey |
401 | The policy expects to find the API key in a variable that is specified in the policy's <APIKey> element. This error arises when the expected variable does not exist (it cannot be resolved). |
oauth.v2.InvalidApiKey |
401 | An API key was received by Edge, but it is invalid. When Edge looks up the key in its database, it must exactly match the on that was sent in the request. If the API worked previously, make sure the key was not regenerated. If the key was regenerated, you will see this error if you try to use the old key. For details, see Register apps and manage API keys. |
oauth.v2.InvalidApiKeyForGivenResource |
401 | An API key was received by Edge, and it is valid; however, it does not match an approved key in the Developer App associated with your API proxy through a Product. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause |
|---|---|
SpecifyValueOrRefApiKey |
The <APIKey> element does not have a value or key specified. |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| 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 "FailedToResolveAPIKey" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.VK-VerifyAPIKey.failed = true |
Example error responses
{
"fault":{
"faultstring":"Invalid ApiKey",
"detail":{
"errorcode":"oauth.v2.InvalidApiKey"
}
}
}{
"fault":{
"detail":{
"errorcode":"keymanagement.service.DeveloperStatusNotActive"
},
"faultstring":"Developer Status is not Active"
}
}Example fault rule
<FaultRule name="FailedToResolveAPIKey">
<Step>
<Name>AM-FailedToResolveAPIKey</Name>
</Step>
<Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition>
</FaultRule>