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
Cho phép bạn sử dụng tính năng Xác thực cơ bản gọn nhẹ cho
khả năng bảo mật ở bước cuối cùng. Chính sách này sẽ lấy tên người dùng và mật khẩu, Base64 mã hoá các thông tin này rồi ghi
giá trị kết quả cho một biến. Giá trị thu được sẽ có dạng Basic
Base64EncodedString
. Bạn thường ghi giá trị này vào tiêu đề HTTP, chẳng hạn như
tiêu đề Uỷ quyền.
Chính sách này cũng cho phép bạn giải mã thông tin xác thực lưu trữ trong chuỗi 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á base64 tên người dùng và bằng cách sử dụ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 được mã hoá base64 và bằng cách sử dụng chính sách Xác thực cơ bản.
Mẫu
Mã hoá thư đ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 sẽ được mã hoá
bắt nguồn từ các biến do các thuộc tính ref
chỉ định trên
Phần tử <User>
và <Password>
. Các biến phải
đặt trước khi chính sách này thực thi. Thông thường, các biến được điền bởi các giá trị
đọc từ bản đồ khoá/giá trị. Xem Bản đồ giá trị chính
Chính sách hoạt động.
Cấu hình này dẫn đến tiêu đề HTTP có tên Uỷ quyền, như được chỉ định bởi phần tử <AssignTo>, đang được thêm vào thông báo yêu cầu gửi đi gửi tới máy chủ phụ trợ:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Các giá trị <User>
và <Password>
được nối với nhau
có dấu hai chấm trước khi mã hoá Base64.
Giả sử bạn có bản đồ khoá/giá trị với mục nhập 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 trước chính sách BasicAuthentication
để có thể trích xuất các giá trị cho <User>
và
Phần tử <Password>
từ kho khoá/giá trị rồi điền chúng vào
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ã đến
<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 giải mã tên người dùng và mật khẩu từ
Tiêu đề HTTP Authorization
, như được chỉ định bởi phần tử <Source>. Base64
chuỗi mã hoá phải có dạng Basic Base64EncodedString.
Chính sách này ghi tên người dùng đã được 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ó 2 chế độ hoạt động:
- Mã hoá: Base64 mã hoá tên người dùng và mật khẩu được lưu trữ trong biến
- Giải mã: Giải mã tên người dùng và mật khẩu 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 đọc từ kho khoá/giá trị trong thời gian chạy. Để biết thông tin chi tiết về cách sử dụng kho khoá/giá trị, hãy xem bài viết Hoạt động trên bản đồ giá trị khoá .
Tham chiếu phần tử
Tham chiếu phần tử mô tả các phần tử và thuộc tính của 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>
<BasicAuthentication> thuộc tính
<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 |
<Operation> phần tử
Xác định xem chính sách Base64 có mã hoá hay giải mã thông tin xác thực 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:
|
<IgnoreUnresolvedVariables> phần tử
Khi bạn đặt thành true
, chính sách này sẽ không báo lỗi nếu một biến không thể được
đã được giải quyết. Khi được sử dụng trong bối cảnh của chính sách BasicAuthentication, chế độ cài đặt này thường được đặt
vào false
vì việc báo lỗi thường có lợi nếu tên người dùng hoặc
không thể tìm thấy mật khẩu trong các biến được chỉ định.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Mặc định: | đúng |
Sự hiện diện: | Không bắt buộc |
Loại: |
Boolean |
<User> phần tử
- Để 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 một dấu hai chấm trước Mã hoá Base64. - Để giải mã, hãy chỉ định biến nơi ghi tên người dùng được giải mã.
<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 |
---|---|---|---|
tham chiếu |
Biến mà chính sách có thể tự động đọc tên người dùng (mã hoá) hoặc ghi tên người dùng (giải mã). |
Không áp dụng | Bắt buộc |
<Password> phần tử
- Để mã hoá, hãy sử 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 |
---|---|---|---|
tham chiếu |
Biến mà chính sách có thể tự động đọc mật khẩu (mã hoá) hoặc ghi từ đó mật khẩu (giải mã). |
Không áp dụng | Bắt buộc |
<AssignTo> phần tử
Chỉ định biến mục tiêu cần đặt bằng giá trị được mã hoá hoặc giải mã do biến này tạo ra .
Ví dụ sau đây cho biết rằng chính sách sẽ đặt Authorization
tiêu đề của thư đến 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 |
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ó ghi đè biến hay không nếu biến đã được
thiết lập.
Khi giá trị "false", việc gán cho biến chỉ xảy ra nếu biến đó là hiện không được đặt (null). Khi giá trị là "true", hoạt động gán cho biến sẽ luôn diễn ra. Bạn thường đặt thuộc tính này thành "false" (mặc định). |
false | Không bắt buộc |
<Source> phần tử
Để giải mã, biến chứa chuỗi được mã hoá Base64, trong giá trị
biểu mẫu 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 đượ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 để biết liệu bạn có đang phát triển các quy tắc lỗi để xử lý lỗi hay không. Để 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 thực thi.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Cách khắc phục |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | Khi giải mã, nếu chuỗi được mã hoá Base64 đến không chứa giá trị hợp lệ hoặc tiêu đề có định dạng không chính xác (ví dụ: không bắt đầu bằng "Basic"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | Không có biến nguồn bắt buộc để giải mã hoặc mã hoá. Lỗi này chỉ có thể xảy ra nếu IgnoreUnresolvedVariables là sai. |
build |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai một proxy chứa chính sách này.
Tên lỗi | Xảy ra khi | Cách 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ó trong toán tử được đặt tên. |
build |
AssignToRequired |
Phần tử <AssignTo> phải có trong toán tử được đặt tên. |
build |
SourceRequired |
Phần tử <Source> phải có trong toán tử đượ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 liên quan đến 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ửi lỗi. | BasicAuthentication.BA-Authenticate.failed = true |
Ví dụ về phản hồi 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>