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
Cho phép bạn sử dụng phương thức Xác thực cơ bản đơn giản để bảo mật ở chặng cuối. Chính sách này lấy tên người dùng và mật khẩu, mã hoá chúng bằng Base64 và ghi giá trị kết quả vào một biến. Giá trị thu được có dạng Basic
Base64EncodedString
. Thông thường, bạn sẽ ghi giá trị này vào một tiêu đề HTTP, chẳng hạn như tiêu đề Authorization.
Chính sách này cũng cho phép bạn giải mã thông tin đăng nhập được lưu trữ trong một chuỗi được mã hoá Base64 thành tên người dùng và mật khẩu.
Video: Video này minh hoạ cách mã hoá tên người dùng và mật khẩu bằng base64 bằng chính sách Xác thực cơ bản.
Video: Video này minh hoạ cách giải mã tên người dùng và mật khẩu được mã hoá base64 bằng chính sách Xác thực cơ bản.
Mẫu
Mã hoá cho cuộc gọi đi
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
Trong cấu hình chính sách mẫu ở trên, tên người dùng và mật khẩu cần được mã hoá bắt nguồn từ các biến do thuộc tính ref
chỉ định trên các phần tử <User>
và <Password>
. Bạn phải đặt các biến trước khi chính sách này thực thi. Thông thường, các biến được điền sẵn bằng các giá trị được đọc từ một bản đồ khoá/giá trị. Xem Chính sách về các thao tác trên Bản đồ khoá-giá trị.
Cấu hình này sẽ dẫn đến tiêu đề HTTP có tên là Uỷ quyền, như được chỉ định bởi phần tử <AssignTo>, được thêm vào thông báo yêu cầu đi gửi đến máy chủ phụ trợ:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Các giá trị <User>
và <Password>
được nối với dấu hai chấm trước khi mã hoá Base64.
Giả sử bạn có một bản đồ khoá/giá trị với mục sau:
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername" }, { "name" : "password", "value" : "MyPassword" } ], "name" : "BasicAuthCredentials" }
Đính kèm các chính sách KeyValueMapOperations sau đây trước chính sách BasicAuthentication để có thể trích xuất các giá trị cho phần tử <User>
và <Password>
từ kho khoá/giá trị và điền các giá trị đó vào các biến credentials.username
và credentials.password
.
<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials"> <Scope>apiproxy</Scope> <Get assignTo="credentials.username" index='1'> <Key> <Parameter>username</Parameter> </Key> </Get> <Get assignTo="credentials.password" index='1'> <Key> <Parameter>password</Parameter> </Key> </Get> </KeyValueMapOperations>
Giải mã dữ liệu đầu vào
<BasicAuthentication name="DecodeBaseAuthHeaders"> <DisplayName>Decode Basic Authentication Header</DisplayName> <Operation>Decode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.header.username" /> <Password ref="request.header.password" /> <Source>request.header.Authorization</Source> </BasicAuthentication>
Trong mẫu chính sách này, chính sách sẽ giải mã tên người dùng và mật khẩu từ tiêu đề HTTP Authorization
, như được chỉ định bằng phần tử <Source>. Chuỗi được mã hoá Base64 phải có dạng Basic Base64EncodedString.
Chính sách này ghi tên người dùng đã giải mã vào biến request.header.username và mật khẩu đã giải mã vào biến request.header.password.
Giới thiệu về chính sách Xác thực cơ bản
Chính sách này có hai chế độ hoạt động:
- Mã hoá: Mã hoá Base64 cho tên người dùng và mật khẩu được lưu trữ trong các biến
- Giải mã: Giải mã tên người dùng và mật khẩu từ một chuỗi được mã hoá Base64
Tên người dùng và mật khẩu thường được lưu trữ trong kho khoá/giá trị rồi đọc từ kho khoá/giá trị tại thời gian chạy. Để biết thông tin chi tiết về cách sử dụng khoá/giá trị, hãy xem Chính sách về các thao tác trên bản đồ khoá giá trị.
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 BasicAuthentication.
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.queryparam.username" /> <Password ref="request.queryparam.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
Thuộc tính <BasicAuthentication>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-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ử <Operation>
Xác định xem chính sách có mã hoá Base64 hay giải mã thông tin đăng nhập hay không.
<Operation>Encode</Operation>
Mặc định: | Không áp dụng |
Sự hiện diện: | Bắt buộc |
Loại: |
Chuỗi. Các giá trị hợp lệ bao gồm:
|
Phần tử <IgnoreUnresolvedVariables>
Khi được đặt thành true
, chính sách sẽ không báo lỗi nếu không thể phân giải một biến. Khi được dùng trong bối cảnh của chính sách BasicAuthentication, chế độ cài đặt này thường được đặt thành false
vì việc gửi lỗi nếu không tìm thấy tên người dùng hoặc mật khẩu trong các biến được chỉ định thường có lợi.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Mặc định: | true |
Sự hiện diện: | Không bắt buộc |
Loại: |
Boolean |
Phần tử <User>
- Để mã hoá, hãy sử dụng phần tử
<User>
để chỉ định biến chứa tên người dùng. Các giá trị tên người dùng và mật khẩu được nối với dấu hai chấm trước khi mã hoá Base64. - Để giải mã, hãy chỉ định biến nơi tên người dùng đã giải mã được ghi.
<User ref="request.queryparam.username" />
Mặc định: | Không áp dụng |
Sự hiện diện: | Bắt buộc |
Loại: |
Không áp dụng |
Thuộc tính
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Biến mà từ đó chính sách sẽ đọc tên người dùng (mã hoá) hoặc ghi tên người dùng (giải mã) một cách linh động. |
Không áp dụng | Bắt buộc |
Phần tử <Password>
- Để mã hoá, hãy dùng phần tử
<Password>
để chỉ định biến chứa mật khẩu. - Để giải mã, hãy chỉ định biến nơi mật khẩu đã giải mã được ghi.
<Password ref="request.queryparam.password" />
Mặc định: | Không áp dụng |
Sự hiện diện: | Bắt buộc |
Loại: |
Không áp dụng |
Thuộc tính
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Biến mà từ đó chính sách sẽ đọc mật khẩu (mã hoá) hoặc ghi mật khẩu (giải mã) một cách linh động. |
Không áp dụng | Bắt buộc |
Phần tử <AssignTo>
Đối với thao tác Encode
, hãy chỉ định biến mục tiêu cần đặt bằng giá trị được mã hoá do chính sách này tạo.
Ví dụ sau đây cho biết rằng chính sách này sẽ đặt tiêu đề Authorization
của thông báo thành giá trị được tạo:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
Mặc định: | Không áp dụng |
Sự hiện diện: | Bắt buộc đối với thao tác Encode . |
Loại: |
Chuỗi |
Thuộc tính
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
createNew | Xác định xem chính sách có nên ghi đè biến hay không nếu biến đã được đặt.
Khi "false", việc chỉ định cho biến chỉ xảy ra nếu biến hiện chưa được đặt (rỗng). Khi "true", việc chỉ định cho biến luôn xảy ra. Thông thường, bạn đặt thuộc tính này thành "false" (mặc định). |
false | Không bắt buộc |
Phần tử <Source>
Để giải mã, biến chứa chuỗi được mã hoá Base64, ở dạng Basic
Base64EncodedString
. Ví dụ: chỉ định request.header.Authorization
, tương ứng với tiêu đề Uỷ quyền.
<Source>request.header.Authorization</Source>
Mặc định: | Không áp dụng |
Sự hiện diện: | Bắt buộc đối với thao tác Giải mã. |
Loại: |
Không áp dụng |
Biến luồng
Biến luồng sau đây được đặt khi chính sách không thành công:
BasicAuthentication.{policy_name}.failed
(có giá trị là true)
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ách và Cá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.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | Trên bộ giải mã khi chuỗi được mã hoá Base64 đến không chứa giá trị hợp lệ hoặc tiêu đề không đúng định dạng (ví dụ: không bắt đầu bằng "Cơ bản"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | Các biến nguồn bắt buộc cho giải mã hoặc mã hoá không có. Lỗi này có thể
chỉ xảy ra nếu IgnoreUnresolvedVariables là false. |
build |
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 | Xảy ra khi | Khắc phục |
---|---|---|
UserNameRequired |
Phần tử <User> phải có mặt cho thao tác được đặt tên. |
build |
PasswordRequired |
Phần tử <Password> phải có mặt cho thao tác được đặt tên. |
build |
AssignToRequired |
Phần tử <AssignTo> phải có mặt cho thao tác được đặt tên. |
build |
SourceRequired |
Phần tử <Source> phải có mặt cho thao tác được đặt tên. |
build |
Biến lỗi
Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.
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 "UnresolvedVariable" |
BasicAuthentication.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. | BasicAuthentication.BA-Authenticate.failed = true |
Ví dụ về phản hồi khi gặp lỗi
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Ví dụ về quy tắc lỗi
<FaultRule name="Basic Authentication Faults"> <Step> <Name>AM-UnresolvedVariable</Name> <Condition>(fault.name Matches "UnresolvedVariable") </Condition> </Step> <Step> <Name>AM-AuthFailedResponse</Name> <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition> </Step> <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition> </FaultRule>