Khắc phục lỗi thời gian chạy 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

UnresolvedVariable

Mã lỗi

steps.basicauthentication.UnresolvedVariable

Nội dung phản hồi lỗi

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Thông báo lỗi mẫu

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu biến chứa chuỗi được mã hoá Base64 được chỉ định trong phần tử <Source> của chính sách Basic LDAP:

  • Ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách)
  • Không thể phân giải (không xác định)

Ví dụ: lỗi này xảy ra nếu chính sách BasicXác thực có một biến được chỉ định là request.header.Authorization trong phần tử <Source>, nhưng tiêu đề Uỷ quyền không được chuyển trong yêu cầu API.

Chẩn đoán

  1. Xác định biến được dùng cho phần tử <Source> trong chính sách BasicConfirm. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring, sau đây, biến được dùng cho phần tử <Source>request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Kiểm tra tất cả các chính sách Basicxác thực trong Proxy API cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách Basicxác thực. Xác định chính sách hoặc các chính sách BasicConfirm cụ thể, trong đó biến được chỉ định trong phần tử <Source> khớp với tên biến được xác định trong chuỗi lỗi (bước #1 ở trên).

    Ví dụ: chính sách sau đây đặt phần tử <Source> thành một biến có tên request.header.Authorization, khớp với nội dung trong faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <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>
    
  3. Xác định xem biến có được xác định và có sẵn trong luồng mà chính sách BasicConfirm đang được thực thi hay không.

  4. Nếu biến đó là:

    1. Ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách)
    2. Không thể phân giải (không xác định)

    Đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách BasicXác thực trình bày ở trên, biến request.header.Authorization không được truyền trong yêu cầu. Điều đó có nghĩa là yêu cầu API được thực hiện mà không có tiêu đề Uỷ quyền như sau:

    curl -v "http://org-env.apigee.net/basicauth"

    Vì biến được dùng trong chính sách BasicConfirm không có sẵn, nên bạn sẽ nhận được mã lỗi:

    steps.basicauthentication.UnresolvedVariable
    

Độ phân giải

Đảm bảo rằng biến dùng trong chính sách BasicConfirm được xác định hoặc truyền dưới dạng dữ liệu đầu vào và có sẵn trong luồng mà chính sách đang được thực thi.

Để khắc phục vấn đề về chính sách BasicXác thực mẫu đã thảo luận ở trên, hãy tạo một yêu cầu API như sau:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

InvalidBasicAuthenticationSource

Mã lỗi

steps.basicauthentication.InvalidBasicAuthenticationSource

Nội dung phản hồi lỗi

{
    "fault": {
        "faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Thông báo lỗi mẫu về lỗi

{
    "fault": {
        "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

Các nguyên nhân có thể

Nguyên nhân có thể dẫn đến lỗi này là:

Nguyên nhân Nội dung mô tả
Biến nguồn không hợp lệ Biến nguồn đầu vào đối với Chính sách cơ bản xác thực không phải là một chuỗi được mã hoá Base64 hợp lệ.
Tiêu đề không đúng định dạng Tiêu đề chứa chuỗi đã mã hoá Base64 được chuyển đến chính sách BasicConfirm không đúng định dạng.

Nguyên nhân: Biến nguồn không hợp lệ

Lỗi này xảy ra nếu biến chứa chuỗi được mã hoá Base64 được chỉ định trong phần tử <Source> của chính sách Xác thực cơ bản không chứa giá trị hợp lệ.

Ví dụ: lỗi này xảy ra nếu biến được chỉ định trong phần tử <Source> của chính sách BasicConfirm không có chuỗi được mã hoá Base64 hợp lệ.

Chẩn đoán

  1. Xác định biến được dùng cho phần tử <Source> trong chính sách BasicConfirm. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong faultstring, sau đây, biến được dùng cho phần tử <Source>request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Kiểm tra tất cả các chính sách Basicxác thực trong Proxy API cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách Basicxác thực. Xác định (các) chính sách BasicConfirm cụ thể, trong đó biến được chỉ định trong phần tử <Source> khớp với tên biến được xác định trong chuỗi lỗi (bước #1 ở trên).

    Ví dụ: chính sách sau đây đặt phần tử <Source> thành một biến có tên request.header.Authorization, khớp với nội dung trong faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <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>
    
  3. Nếu giá trị được lưu trữ trong biến được chỉ định trong phần tử <Source> không phải là một chuỗi mã hoá Base64 hợp lệ, thì đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách BasicXác thực được trình bày ở trên, biến request.header.Authorization được ứng dụng gửi dưới dạng tiêu đề không hợp lệ như sau:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic 23435"

    Vì biến request.header.Authorization có chuỗi mã hoá Base64 không hợp lệ "23435", nên bạn sẽ nhận được mã lỗi:

    steps.basicauthentication.InvalidBasicAuthenticationSource

Độ phân giải

Đảm bảo rằng biến được chỉ định cho phần tử <Source> trong chính sách Basicxác thực có một chuỗi được mã hoá Base64 hợp lệ.

Để khắc phục vấn đề với chính sách BasicXác thực mẫu đã thảo luận ở trên, hãy tạo một yêu cầu API bằng cách chuyển chuỗi được mã hoá Base64 hợp lệ trong tiêu đề Uỷ quyền như được hiển thị dưới đây:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

Nguyên nhân: Tiêu đề không đúng định dạng/không hợp lệ

Lỗi này xảy ra nếu tiêu đề được chuyển vào chính sách Xác thực cơ bản không đúng định dạng hoặc không hợp lệ.

Ví dụ: lỗi này xảy ra nếu chính sách BasicXác thực có một biến được chỉ định là request.header.Authorization trong phần tử <Source> và tiêu đề được truyền trong yêu cầu API không đúng định dạng/không hợp lệ.

Chẩn đoán

  1. Xác định biến được dùng cho phần tử <Source> trong chính sách BasicConfirm. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong lỗi sau đây, biến được dùng cho phần tử <Source>request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. Kiểm tra tất cả các chính sách Basicxác thực trong Proxy API cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách Basicxác thực. Xác định (các) chính sách BasicConfirm cụ thể, trong đó biến được chỉ định trong phần tử <Source> khớp với tên biến được xác định trong chuỗi lỗi (bước #1 ở trên).

    Ví dụ: chính sách sau đây đặt phần tử <Source> thành một biến có tên request.header.Authorization, khớp với nội dung trong faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <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>
    
  3. Nếu biến là một tiêu đề và không đúng định dạng hoặc không hợp lệ, tức là biến đó không có loại xác thực hoặc nếu loại xác thực không phải là "Cơ bản", thì đó chính là nguyên nhân gây ra lỗi.

    Tiêu đề Uỷ quyền có dạng sau:

    Authorization: <Authentication type> <credentials>
    

    Có thể chuyển một tiêu đề không đúng định dạng vào chính sách BasicConfirm theo 2 cách:

    Ví dụ 1: Không có loại xác thực trong Tiêu đề:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"

    Trong ví dụ trên, tiêu đề Uỷ quyền không có loại Xác thực. Nếu tiêu đề này được chuyển vào chính sách BasicConfirm được hiển thị ở trên, bạn sẽ nhận được mã lỗi:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ví dụ 2: Hình thức xác thực không thuộc loại "Cơ bản":

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    Trong ví dụ trên, tiêu đề Uỷ quyền không có loại Xác thực là "Cơ bản". Nếu phương thức này được chuyển vào chính sách BasicConfirm được hiển thị ở trên, bạn sẽ nhận được mã lỗi:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Tương tự, lỗi này cũng có thể xảy ra nếu loại Xác thực như Mang, Xác thực thông báo, v.v. được sử dụng trong tiêu đề Uỷ quyền.

Độ phân giải

Đảm bảo rằng tiêu đề nhận dữ liệu nhập vào chính sách Basicxác thực có loại Xác thực và thuộc loại "Cơ bản".

Để khắc phục sự cố với chính sách BasicXác thực mẫu đã thảo luận ở trên, hãy tạo một yêu cầu API bằng cách chuyển chuỗi được mã hoá Base64 hợp lệ với loại Xác thực "Cơ bản" trong tiêu đề Uỷ quyền như được hiển thị dưới đây:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"