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.
Truy cập vào tài liệu 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 BasicAuthentication là:

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

Ví dụ: lỗi này xảy ra nếu chính sách BasicAuthentication 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 truyền trong yêu cầu API.

Chẩn đoán

  1. Xác định biến dùng cho phần tử <Source> trong chính sách BasicAuthentication. 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> là request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Kiểm tra tất cả các chính sách BasicAuthentication trong API Proxy cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách BasicAuthentication. Xác định (các) chính sách BasicAuthentication cụ thể mà 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 là 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 quy trình mà chính sách BasicAuthentication đang được thực thi hay không.

  4. Nếu biến là một trong hai trường hợp sau:

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

    Vậy thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách BasicAuthentication nêu trên, biến request.header.Authorization không được truyền trong yêu cầu. Tức là yêu cầu API được thực hiện mà không có tiêu đề Uỷ quyền như minh hoạ bên dưới:

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

    Vì biến được dùng trong chính sách BasicAuthentication 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 được dùng trong chính sách BasicAuthentication đượ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ới chính sách BasicAuthentication mẫu đã thảo luận ở trên, hãy đưa ra một yêu cầu API như minh hoạ dưới đây:

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"
        }
    }
}

Ví dụ về lỗi Thông báo 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ể

Các nguyên nhân có thể gây ra lỗi này là:

Nguyên nhân Mô tả
Biến nguồn không hợp lệ Biến nguồn đầu vào cho Chính sách BasicAuthentication không phải là một chuỗi được mã hoá Base64 hợp lệ.
Phần đầu thư có định dạng không đúng Tiêu đề chứa chuỗi được mã hoá Base64 được truyền đến chính sách BasicAuthentication bị sai đị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 BasicAuthentication 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 BasicAuthentication không có chuỗi được mã hoá Base64 hợp lệ.

Chẩn đoán

  1. Xác định biến dùng cho phần tử <Source> trong chính sách BasicAuthentication. 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> là 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 BasicAuthentication trong API Proxy cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách BasicAuthentication. Xác định (các) chính sách BasicAuthentication cụ thể mà 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 là 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 được mã hoá Base64 hợp lệ, thìđó là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách BasicAuthentication nêu trên, biến request.header.Authorization do máy khách gửi dưới dạng tiêu đề không hợp lệ như minh hoạ dưới đây:

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

    Vì biến request.header.Authorization có một chuỗi được 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 BasicAuthentication có một chuỗi được mã hoá Base64 hợp lệ.

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

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

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

Lỗi này xảy ra nếu tiêu đề được truyền đến chính sách BasicAuthentication 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 BasicAuthentication có một biến được chỉ định là request.header.Authorization trong phần tử <Source> và tiêu đề được truyền dưới dạng một phần của yêu cầu API bị lỗi/không hợp lệ.

Chẩn đoán

  1. Xác định biến dùng cho phần tử <Source> trong chính sách BasicAuthentication. 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, biến được dùng cho phần tử <Source> là 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 BasicAuthentication trong API Proxy cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều chính sách BasicAuthentication. Xác định (các) chính sách BasicAuthentication cụ thể mà 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 là 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à bị sai đị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ì đó là nguyên nhân gây ra lỗi.

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

    Authorization: <Authentication type> <credentials>
    

    Bạn có thể truyền một tiêu đề có định dạng không đúng cho chính sách BasicAuthentication theo hai 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 truyền đến chính sách BasicAuthentication như trình bày ở trên, bạn sẽ nhận được mã lỗi:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    Ví dụ 2: Loại xác thực không phải là 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 bạn truyền thông tin này đến chính sách BasicAuthentication như minh hoạ ở 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 bạn sử dụng loại Xác thực như Bearer, Digest Auth, v.v. trong tiêu đề Uỷ quyền.

Độ phân giải

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

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

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