Chính sách Xác thực Cơ bản

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 chế độ Xác thực cơ bản gọn nhẹ để bảo mật bước cuối. 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 giá trị này và ghi giá trị kết quả vào một biến. Giá trị thu được có dạng Basic Base64EncodedString. Bạn thường ghi giá trị này vào một tiêu đề HTTP, chẳng hạn như tiêu đề Authorize (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 đượ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á base64 tên người dùng và mật khẩu 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á 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 cần 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><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ởi các giá trị được đọc từ bản đồ khoá/giá trị. Xem Chính sách về hoạt động đối với bản đồ giá trị chính.

Cấu hình này dẫn đến việc tiêu đề HTTP có tên 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 gửi đi được gửi tới máy chủ phụ trợ:

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

Các giá trị <User><Password> được nối bằng dấu hai chấm trước khi mã hoá Base64.

Hãy nhớ rằng 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 đây trước chính sách BasicConfirm để có thể trích xuất các giá trị cho các thành phần <User><Password> của bạn từ kho khoá/giá trị và điền chúng vào các biến credentials.usernamecredentials.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ã thư đế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 này 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>. Chuỗi mã hoá Base64 phải có dạng Basic Base64EncodedString.

Chính sách này sẽ 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á: Base64 mã hoá 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ữ vào kho khoá/giá trị, sau đó được đọc từ kho lưu trữ 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ị, vui lòng xem Chính sách về hoạt động ánh xạ 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 chính sách BasicConfirm.

<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 <BasicCredential>

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">

Bảng sau đây mô tả các thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Nội dung 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ự.

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này 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 một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

Đặt thành true để quá trình thực thi luồng tiếp tục ngay cả khi chính sách không thành công.

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặ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 chính sách vẫn được đính kèm vào một quy trì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

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn cho 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 khác theo ngôn ngữ tự nhiên.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, thì giá trị thuộc tính name của chính sách sẽ được sử dụng.

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 Base64 mã hoá hay giải mã thông tin xác thực.

<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:

  • Mã hóa
  • Decode

Phần tử <IgnoreUnresolvedVariables>

Khi bạn đặt thành true, chính sách này sẽ không báo lỗi nếu không thể phân giải một biến. Khi được sử dụng trong ngữ cảnh của chính sách Basicxác thực, chế độ cài đặt này thường được đặt thành false vì thường sẽ có lợi cho việc báo 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.

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Mặc định: đúng
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 bằng dấu hai chấm trước khi mã hoá Base64.
  • Để giải mã, hãy chỉ định biến nơi ghi tên người dùng đã 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 Nội dung mô tả Mặc định Sự hiện diện
giới thiệu

Biến mà từ đó chính sách sẽ linh độ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

Phần tử <Password>

  • Để 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 viết.
<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 Nội dung mô tả Mặc định Sự hiện diện
giới thiệu

Biến mà từ đó chính sách sẽ linh động đọc mật khẩu (mã hoá) hoặc ghi mật khẩu (giải mã).

Không áp dụng Bắt buộc

Phần tử <assignTo>

Chỉ định biến mục tiêu để đặt bằng giá trị được mã hoá hoặc giải mã do chính sách này tạo ra.

Ví dụ sau đây cho biết rằng chính sách nên đặ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
Loại:

Chuỗi

Thuộc tính

Thuộc tính Nội dung 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 đặt.

Khi giá trị là "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 giá trị "true", hoạt động gán cho biến luôn diễn 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 mã hoá Base64, ở dạng Basic Base64EncodedString. Ví dụ: chỉ định request.header.Authorization, tương ứng với tiêu đề Authorize (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 này không thành công:

  • BasicAuthentication.{policy_name}.failed (có giá trị 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. Đây là thông tin quan trọng mà bạn cần biết nếu đ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 Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi thực thi chính sách.

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").
steps.basicauthentication.UnresolvedVariable 500 Không có biến nguồn bắt buộc cho bộ giải mã hoặc mã hoá. Lỗi này chỉ có thể xảy ra nếu giá trị IgnoreUnresolvedVariables sai.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy 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ó cho thao tác được đặt tên.
PasswordRequired Phần tử <Password> phải có cho thao tác được đặt tên.
AssignToRequired Phần tử <AssignTo> phải có cho thao tác được đặt tên.
SourceRequired Phần tử <Source> phải có cho thao tác được đặt tên.

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 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ư 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 của chính sách báo lỗi do người dùng chỉ định. 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>

Giản đồ

Chủ đề có liên quan

Chính sách về hoạt động của bản đồ giá trị chính