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 về lỗi

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

Ví dụ về thông báo lỗi

{
    "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à:

  • Không thuộc phạm vi (không có trong luồng cụ thể mà 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 dùng cho phần tử <Source>request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. Kiểm tra tất cả chính sách BasicAuthentication 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 BasicAuthentication. Xác định chính sách BasicAuthentication hoặc các chính sách cụ thể mà 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 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 BasicAuthentication đang được thực thi hay không.

  4. Nếu biến là:

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

    Tiếp đó, đó là nguyên nhân gây ra lỗi.

    Trong ví dụ về chính sách BasicAuthentication ở trên, biến request.header.Authorization không được chuyển vào 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ạ dưới đây:

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

    Vì biến được sử dụng trong chính sách BasicAuthentication không hoạt động, 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 sử 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ó trong luồng đang thực thi chính sách.

Để khắc phục vấn đề với chính sách BasicAuthentication 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 về 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 ví dụ 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ể

Có thể có những nguyên nhân sau đây gây ra lỗi này:

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à chuỗi được mã hoá Base64 hợp lệ.
Tiêu đề có định dạng không chính xác Tiêu đề chứa chuỗi được mã hoá Base64 được chuyển đến chính sách BasicAuthentication có định dạng không chính xác.

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 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ả chính sách BasicAuthentication 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 BasicAuthentication. Xác định (các) chính sách BasicAuthentication 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 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ị 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 ở trên, biến request.header.Authorization mà ứng dụng gửi dưới dạng tiêu đề là không hợp lệ như minh hoạ bên dưới:

    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 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 tạo 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 có định dạng không chính xác 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 trong yêu cầu API có định dạng không chính xác/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 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ả chính sách BasicAuthentication 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 BasicAuthentication. Xác định (các) chính sách BasicAuthentication 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 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à tiêu đề và có định dạng không chính xác 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 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 nào 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 đến chính sách BasicAuthentication hiển thị ở 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 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 mã này được chuyển đến chính sách BasicAuthentication như sau, 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 tạo một yêu cầu API bằng cách truyền một chuỗi Base64 hợp lệ được mã hoá bằng 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"