BasicAuthentication 정책 런타임 오류 문제 해결

ApigeeApigee Hybrid 문서입니다.
Apigee Edge 문서 보기

UnresolvedVariable

오류 코드

steps.basicauthentication.UnresolvedVariable

오류 응답 본문

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

오류 메시지 예

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

원인

이 오류는 BasicAuthentication 정책<Source> 요소에 지정된 Base64로 인코딩된 문자열이 포함된 변수가 다음 중 하나인 경우에 발생합니다.

  • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
  • 확인할 수 없는 경우(정의되지 않음)

예를 들어 이 오류는 BasicAuthentication 정책에 <Source> 요소에서 request.header.Authorization으로 지정된 변수가 있지만 Authorization 헤더가 API 요청의 일부로 전달되지 않은 경우에 발생합니다.

진단

  1. BasicAuthentication 정책의 <Source> 요소에 사용된 변수를 식별합니다. 오류 응답의 faultstring 요소에서 이 정보를 확인할 수 있습니다. 예를 들어 다음 faultstring,에서 <Source> 요소에 사용된 변수는 request.header.Authorization입니다.

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. 오류가 발생한 특정 API 프록시의 모든 BasicAuthentication 정책을 검사합니다. BasicAuthentication 정책이 한 개 이상 있을 수 있습니다. <Source> 요소에 지정된 변수가 오류 문자열에서 식별된 변수 이름과 일치하는 특정 BasicAuthentication 정책을 식별합니다(위 1단계).

    예를 들어 다음 정책은 <Source> 요소를 faultstring의 변수와 일치하는 request.header.Authorization이라는 변수로 설정합니다.

    <?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. 변수가 BasicAuthentication 정책이 실행되는 흐름에서 정의되고 사용 가능한지 확인합니다.

  4. 변수가 다음 중 하나인 경우

    1. 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
    2. 확인할 수 없는 경우(정의되지 않음)

    이는 오류의 원인이 됩니다.

    위에 표시된 BasicAuthentication 정책의 예시에서는 request.header.Authorization 변수가 요청의 일부로 전달되지 않았습니다. 즉, 아래와 같이 Authorization 헤더 없이 API 요청이 수행됩니다.

    curl -v "http://$EXTERNAL_IP/basicauth"

    여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

    BasicAuthentication 정책에 사용된 변수를 사용할 수 없으므로 다음 오류 코드가 표시됩니다.

    steps.basicauthentication.UnresolvedVariable
    

해결 방법

BasicAuthentication 정책에 사용된 변수가 입력으로 정의되거나 전달되고 정책이 실행되는 흐름에서 사용 가능한지 확인합니다.

위에 설명된 샘플 BasicAuthentication 정책 문제를 해결하려면 다음과 같이 API 요청을 수행합니다.

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

InvalidBasicAuthenticationSource

오류 코드

steps.basicauthentication.InvalidBasicAuthenticationSource

오류 응답 본문

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

오류 예시 오류 메시지

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

가능한 원인

이 오류의 가능한 원인은 다음과 같습니다.

원인 설명
잘못된 소스 변수 BasicAuthentication 정책에 대한 입력 소스 변수가 유효한 Base64로 인코딩된 문자열이 아닙니다.
헤더 형식이 잘못됨 BasicAuthentication 정책에 전달된 Base64로 인코딩된 문자열이 포함된 헤더의 형식이 잘못되었습니다.

원인: 잘못된 소스 변수

이 오류는 BasicAuthentication 정책<Source> 요소에 지정된 Base64로 인코딩된 문자열이 포함된 변수에 유효한 값이 없으면 발생합니다.

예를 들어 BasicAuthentication 정책의 <Source> 요소에 지정된 변수에 유효한 Base64로 인코딩된 문자열이 없으면 이 오류가 발생합니다.

진단

  1. BasicAuthentication 정책의 <Source> 요소에 사용된 변수를 식별합니다. 오류 응답의 faultstring 요소에서 이 정보를 확인할 수 있습니다. 예를 들어 다음 faultstring,에서 <Source> 요소에 사용된 변수는 request.header.Authorization입니다.

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. 오류가 발생한 특정 API 프록시의 모든 BasicAuthentication 정책을 검사합니다. BasicAuthentication 정책이 한 개 이상 있을 수 있습니다. <Source> 요소에 지정된 변수가 오류 문자열에서 식별된 변수 이름과 일치하는 특정 BasicAuthentication 정책을 식별합니다(위의 1단계).

    예를 들어 다음 정책은 <Source> 요소를 faultstring의 변수와 일치하는 request.header.Authorization이라는 변수로 설정합니다.

    <?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. <Source> 요소에 지정된 변수에 저장된 값이 유효한 Base64로 인코딩된 문자열이 아닌 경우 오류 원인이 입니다.

    위 BasicAuthentication 정책 예시에서 클라이언트가 헤더로 보낸 request.header.Authorization 변수가 다음과 같이 잘못되었습니다.

    curl -v "http://$EXTERNAL_IP /basicauth" -H "Authorization: Basic 23435"

    여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

    request.header.Authorization 변수에 잘못된 Base64로 인코딩된 문자열 '23435"가 있으므로 다음과 같은 오류 코드가 표시됩니다.

    steps.basicauthentication.InvalidBasicAuthenticationSource

해결 방법

BasicAuthentication 정책의 <Source> 요소에 지정된 변수에 유효한 Base64로 인코딩된 문자열이 있는지 확인합니다.

위에 설명된 샘플 BasicAuthentication 정책 문제를 해결하려면 다음과 같이 Authorization 헤더에 유효한 Base64로 인코딩된 문자열을 전달하여 API 요청을 수행합니다.

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

원인: 헤더 형식이 잘못됨/헤더가 잘못됨

이 오류는 BasicAuthentication 정책에 전달된 헤더의 형식이 잘못되었거나 헤더가 잘못된 경우에 발생합니다.

예를 들어 BasicAuthentication 정책에 <Source> 요소에서 request.header.Authorization으로 지정된 변수가 있고 API 요청의 일부로 전달된 헤더의 형식이 잘못되거나 헤더가 잘못된 경우에 발생합니다.

진단

  1. BasicAuthentication 정책의 <Source> 요소에 사용된 변수를 식별합니다. 오류 응답의 faultstring 요소에서 이 정보를 확인할 수 있습니다. 예를 들어 다음 오류에서 <Source>요소에 사용된 변수는 request.header.Authorization입니다.

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. 오류가 발생한 특정 API 프록시의 모든 BasicAuthentication 정책을 검사합니다. BasicAuthentication 정책이 한 개 이상 있을 수 있습니다. <Source> 요소에 지정된 변수가 오류 문자열에서 식별된 변수 이름과 일치하는 특정 BasicAuthentication 정책을 식별합니다(위의 1단계).

    예를 들어 다음 정책은 <Source> 요소를 faultstring의 변수와 일치하는 request.header.Authorization이라는 변수로 설정합니다.

    <?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. 변수가 헤더이고 헤더 형식이 잘못되었거나 헤더가 잘못된 경우(즉, 인증 유형이 없거나 인증 유형이 '기본'이 아닌 경우) 이로 인해 오류가 발생합니다.

    Authorization 헤더는 다음과 같은 형식입니다.

    Authorization: <Authentication type> <credentials>
    

    형식이 잘못된 헤더는 다음과 같은 두 가지 방법으로 BasicAuthentication 정책에 전달될 수 있습니다.

    예시 1: 헤더에 인증 유형이 없습니다.

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: YWthc2g6MTIz"

    여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

    위 예시에서 Authorization 헤더에 인증 유형이 없습니다. 이 헤더가 위와 같은 BasicAuthentication 정책에 전달되면 다음과 같은 오류 코드가 표시됩니다.

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    예시 2: 인증 유형이 '기본' 유형이 아닙니다.

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.

    위 예시에서 Authorization 헤더에 '기본' 인증 유형이 없습니다. 이 헤더가 위와 같은 BasicAuthentication 정책에 전달되면 다음과 같은 오류 코드가 표시됩니다.

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    마찬가지로 이 오류는 Bearer, Digest Auth와 같은 인증 유형이 Authorization 헤더에 사용된 경우에도 발생할 수 있습니다.

해결 방법

BasicAuthentication 정책에 대한 입력이 전달되는 헤더에 인증 유형이 있고 인증 유형이 '기본'인지 확인합니다.

위에 설명된 샘플 BasicAuthentication 정책 문제를 해결하려면 다음과 같이 Authorization 헤더에 'Basic' 인증 유형과 함께 유효한 Base64로 인코딩된 문자열을 전달하여 API 요청을 수행합니다.

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

여기서 $EXTERNAL_IP는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 라우팅 구성을 참조하세요.