VerifyJWT 政策部署错误问题排查

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

InvalidNameForAdditionalClaim

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid name for additional claim : policy(policy_name) claim(claim_name).

错误消息示例

Error Saving Revision 2
Invalid name for additional claim : policy(JWT-Verify-RS256) claim(iss).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 <AdditionalClaims> 元素的子元素 <Claim> 使用的声明名称是下列某个已注册名称,就会出现此错误:

“kid”“iss”“sub”“aud”“iat”“exp”“nbf”“jti”

已注册的声明在 RFC7519 中指定。

例如,在 <AdditionalClaims> 元素下使用声明名称 iss 会导致此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策和声明名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,声明名称为 iss

    Invalid name for additional claim : policy(JWT-Verify-RS256) claim(iss).
    
  2. 验证失败的 Verify JWT 政策 XML 中 <AdditionalClaims> 元素使用的声明名称与第 1 步中错误消息中识别的声明名称是否匹配。例如,以下政策将声明指定为 iss,它与错误消息中的内容匹配:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name="iss"/>
        </AdditionalClaims>
    </VerifyJWT>
    
  3. 如果 <AdditionalClaims> 元素的子元素 <Claim> 中使用的声明名称是以下某个已注册名称:

    “kid”“iss”“sub”“aud”“iat”“exp”“nbf”“jti”

    就会导致错误。

    在上文所示的 Verify JWT 政策示例中,<Claim> 名称在 <AdditionalClaims> 元素下指定为 iss,从而导致错误:

    Invalid name for additional claim : policy(JWT-Verify-RS256) claim(iss).
    

解决方法

不要在 <AdditionalClaims> 元素的子元素 <Claim> 中使用以下任何已注册的名称:“kid”“iss”“sub”“aud”“iat”“exp”“nbf”或“jti”。

如需更正示例 Verify JWT 政策的问题,请将声明名称更改为 status

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name='status' type='string'>Development</Claim>
    </AdditionalClaims>
</VerifyJWT>

InvalidTypeForAdditionalClaim

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid type for additional claim : policy(policy_name) claim(claim_name) type(type_name).

错误消息示例

Error Saving Revision 2
Invalid type for additional claim : policy(JWT-Verify-RS256) claim(claim) type(integer).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

VerifyJWT 政策 <AdditionalClaims> 元素子元素 <Claim> 的类型不是以下类型之一:

string(默认)、numberbooleanmap

例如,在 <AdditionalClaims> 元素下使用声明类型 integer 会导致错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策的名称、声明名称和类型。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,声明名称为 claim,类型为 integer:

    Invalid type for additional claim : policy(JWT-Verify-RS256) claim(claim) type(integer).
    
  2. 验证失败的 Verify JWT 政策 XML 中 <AdditionalClaims> 元素使用的声明名称以及类型是否与第 1 步中错误消息中识别的声明名称和类型相匹配。例如,以下政策将声明指定为 claim,类型为 integer,与错误消息中的内容匹配:

    <VerifyJWT name="JWT-Verify-RS256">
      <DisplayName>JWT Verify RS256</DisplayName>
      <Algorithm>RS256</Algorithm>
     <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <SecretKey>
          <Value ref="private.secretkey"/>
          <Id>1918290</Id>
      </SecretKey>
      <ExpiresIn>1h</ExpiresIn>
      <Subject>monty-pythons-flying-circus</Subject>
      <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
      <Audience>fans</Audience>
      <Id/>
      <AdditionalClaims>
          <Claim name='claim' ref='reqclaim' type='integer'/>
      </AdditionalClaims>
    </VerifyJWT>
    
  3. 如果 <AdditionalClaims> 元素子元素 <Claim> 中使用的声明类型不是以下类型之一:

    string(默认)、numberbooleanmap

    就会导致错误。

    在上方所示的 Verify JWT 政策示例中,<Claim> 类型在 <AdditionalClaims> 元素下被指定为 integer。由于 integer 不是支持的类型,因此您会收到以下错误:

    Invalid type for additional claim : policy(JWT-Verify-RS256) claim(claim) type(integer).
    

解决方法

确保在 <AdditionalClaims> 元素的子元素 <Claim> 中仅使用支持的数据类型 string(默认)、numberbooleanmap

如需更正示例 Verify JWT 政策,请将声明类型更改为 boolean

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name='claim' ref='reqclaim' type='boolean'/>
    </AdditionalClaims>
</VerifyJWT>

MissingNameForAdditionalClaim

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Error occurred while validation of bean(policy_name.xml) Reason: - Required attribute name is missing in Claim.

错误消息示例

Error Saving Revision 2
Error occurred while validation of bean JWT-Verify-RS256.xml. Reason: - Required attribute name is missing in Claim

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果在 <AdditionalClaims><AdditionalHeaders> 元素的子元素 <Claim> 中未指定声明名称,就会出现此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策的名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256

    Error occurred while validation of bean JWT-Verify-RS256.xml. Reason: - Required attribute name is missing in Claim
    
  2. 检查失败的 Verify JWT 政策 XML,并验证 <AdditionalClaims><AdditionalHeaders> 元素下的子元素 <Claims> 中是否缺少声明名称。例如,以下 Verify JWT 政策不会指定 <AdditionalClaims> 元素下的声明名称:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim ref='reqclaim' type='boolean'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    由于没有在 <AdditionalClaims> 元素下指定 <Claim> 名称,所以会出现以下错误:

    Error occurred while validation of bean JWT-Verify-RS256.xml. Reason: - Required attribute name is missing in Claim
    

解决方法

确保始终在 <AdditionalClaims><AdditionalHeaders> 元素的子元素 <Claim> 中指定声明名称。

如需更正示例 Verify JWT 政策,请指定如下所示的声明名称:

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name='claim' ref='reqclaim' type='boolean'/>
    </AdditionalClaims>
</VerifyJWT>

InvalidNameForAdditionalHeader

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid name for additional header : policy(policy_name)header(header_name).

错误消息示例

Error Saving Revision 2
Invalid name for additional header: policy(JWT-Verify-RS256) header(alg).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果在 <AdditionalHeaders> 元素的子元素 <Claim> 中使用的声明名称是以下任一标准 JWT 标头,则会出现此错误:

algtyp

例如,在 <AdditionalHeaders> 元素下使用声明名称 alg 将导致错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策和标头名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,标头名称为 alg

    Invalid name for additional header: policy(JWT-Verify-RS256) header(alg).
    
  2. 验证失败的 Verify JWT 政策 XML 中 <AdditionalHeaders> 元素下子元素 <Claim> 中使用的标头名称与第 1 步错误消息中确定的标头名称匹配。例如,以下政策将标头指定为 alg,它与错误消息中的内容匹配:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalHeaders>
            <Claim name="alg"/>
        </AdditionalHeaders>
    </VerifyJWT>
    
  3. 如果 <AdditionalClaims> 元素的子元素 <Claim> 中使用的标头名称是以下标准 JWT 标头之一:

    algtyp

    就会导致错误。

    在上文所示的 Verify JWT 政策示例中,<Claim> 名称在 <AdditionalClaims> 元素下指定为 alg,从而导致错误:

    Invalid name for additional header: policy(JWT-Verify-RS256) header(alg).
    

解决方法

请勿在 <AdditionalHeaders> 元素的子元素 <Claim> 中使用标准 JWT 标头 algtyp

如需更正示例 Verify JWT 政策,请在 <AdditionalHeaders> 元素的子元素 <Claim> 中使用名称 x5c

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='x5c'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidTypeForAdditionalHeader

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid type for additional header : policy(policy_name) claim(claim_name) type(type_name).

错误消息示例

Error Saving Revision 2
Invalid type for additional header : policy(JWT-Verify-RS256) claim(claim1) type(integer).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 Verify JWT 政策 <AdditionalHeaders> 元素的子元素 <Claim> 中使用的声明类型不是以下任一类型,则会出现此错误:

string(默认)、numberbooleanmap

例如,在 <AdditionalHeaders> 元素下使用声明类型 integer 将导致错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策的名称、声明名称和类型。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,声明名称为 claim,类型为 integer

    Invalid type for additional header : policy(JWT-Verify-RS256) claim(claim) type(integer).
    
  2. 验证失败的 Verify JWT 政策 XML 中 <AdditionalClaims> 元素使用的声明名称以及类型是否与第 1 步中错误消息中识别的声明名称和类型相匹配。例如,以下政策将声明指定为 claim,声明类型为 integer,,与错误消息中的内容匹配:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalHeaders>
            <Claim name='claim' ref='reqclaim' type='integer'/>
        </AdditionalHeaders>
    </VerifyJWT>
    
  3. 如果 <AdditionalHeaders> 元素子元素 <Claim> 中使用的声明类型不是以下类型之一:

    string(默认)、numberbooleanmap

    就会导致错误。

    在上述示例 Verify JWT 政策中,<AdditionalHeaders> 元素下的 <Claim> 类型被指定为 integer。由于 integer 不是支持的类型,因此您会收到以下错误:

    Invalid type for additional header : policy(JWT-Verify-RS256) claim(claim) type(integer).
    

解决方法

确保在 <AdditionalHeaders> 元素的子元素 <Claim> 中仅使用支持的数据类型 stringnumberbooleanmap

如需更正示例 Verify JWT 政策,请将声明类型更改为 boolean

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='boolean'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidValueOfArrayAttribute

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid value for array attribute: policy(policy_name)claim(claim_name).

错误消息示例

Error Saving Revision 2
Invalid value for array attribute: policy(JWT-Verify-RS256) claim(claim).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 <AdditionalClaims><AdditionalHeaders> 元素的子元素 <Claim> 中的数组属性值未设置为 truefalse,则会出现此错误。

例如,在 <AdditionalClaims><AdditionalHeaders> 元素的子元素 <Claim> 中将数组属性值设置为 yes 会导致错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策和声明名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,声明名称为 claim

    Invalid value for array attribute: policy(JWT-Verify-RS256) claim(claim).
    
  2. 验证失败的 Verify JWT 政策 XML 中 <AdditionalHeaders> 元素下子元素 <Claim> 中使用的声明名称与第 1 步错误消息中确定的声明名称匹配。例如,以下政策将声明名称指定为 claim,它与错误消息中的内容匹配:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='yes'/>
        </AdditionalClaims>
    </VerifyJWT>
    
  3. 如果 <AdditionalClaims> 元素的子元素 <Claim> 中的 array 属性值未设置为 truefalse,则会导致错误。

    由于 <AdditionalClaims> 元素的子元素 <Claim> 中的 array 属性设为上述示例中的 yes,因此会收到错误:

    Invalid value for array attribute: policy(JWT-Verify-RS256) claim(claim).
    

解决方法

确保 <AdditionalClaims><AdditionalHeaders> 元素的子元素 <Claim> 中的数组属性值设置为 truefalse

如需更正上述示例 Verify JWT 政策,请将数组属性值更改为 true

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidValueForElement

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision
Invalid Value for element : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision
Invalid Value for element : policy(JWT-Verify-RS256) element(Algorithm).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 <Algorithm> 元素中指定的值不是以下值之一,就会出现此错误:

HS256HS384HS512RS256RS384RS512

例如,在 <Algorithm> 元素中将算法值指定为 RS128 会导致此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策和元素名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,元素名称为 Algorithm

    Invalid Value for element : policy(JWT-Verify-RS256) element(Algorithm).
    
  2. 检查失败的 Verify JWT 政策 XML 并检查 <Algorithm> 元素指定的值。

    下面是一个 Verify JWT 政策示例:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS128</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id>1918290</Id>
        </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='status' type='string'>Development</Claim>
        </AdditionalClaims>
    </VerifyJWT>
    
  3. 检查 <Algorithm> 元素指定的值。如果不是以下值之一:

    HS256HS384HS512RS256RS384RS512

    就会导致错误。

    在上述的示例 Verify JWT 政策中,<Algorithm> 名称被指定为 HS128。由于不支持此算法,则会出现此错误:

    Invalid Value for element : policy(JWT-Verify-RS256) element(Algorithm).
    

解决方法

确保在 <Algorithm> 元素中指定的值是受支持的值之一:

HS256HS384HS512RS256RS384RS512

如需更正上面显示的示例 Verify JWT 政策(使用 <SecretKey> 元素),请将 <Algorithm> 的值更改为 HS25。请注意,使用 <SecretKey> 元素时,只能使用 HS 系列算法。

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name='status' type='string'>Development</Claim>
    </AdditionalClaims>
</VerifyJWT>

MissingConfigurationElement

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision
Missing configuration element : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision
Missing configuration element : policy(JWT-Verify-RS256) element(PublicKey).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

<PublicKey> 元素在 Verify JWT 政策中与 RSA 系列算法配合使用时,会发生此错误。同样,如果 <SecretKey> 元素在 Verify JWT 政策中与 HS 系列算法配合使用时,则也会发生此错误。

例如,如果不将 <PublicKey> 元素与 RSA 系列算法配合使用,则会导致此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策和缺失元素名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,缺失元素名称为 PublicKey

    Missing configuration element : policy(JWT-Verify-RS256) element(PublicKey).
    
  2. 检查失败的 Verify JWT 政策 XML,并验证错误消息中指出的元素是否缺失。如果缺失,则会导致错误。

    例如,以下政策表明 PublicKey 缺失,Algorithm 使用的是 RS256

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='true'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    示例 Verify JWT 政策使用了 HS 系列算法,但缺少必需的元素 PublicKey,从而导致以下错误:

    Missing configuration element : policy(JWT-Verify-RS256) element(PublicKey).
    

解决方法

确保将必需的 <PublicKey> 元素与 RSA 系列算法配合使用,并且必需的 <SecretKey> 元素与 HS 系列算法配合使用。

如需更正上述示例 Verify JWT 政策(使用 RS256 算法),请将 <PublicKey> 元素添加到 VerifyJWT 政策:

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Algorithm>RS256</Algorithm>
    <PublicKey>
      <Value ref="public.publickey"/>
    </PublicKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidKeyConfiguration

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision 
Invalid Key configuration : policy(policy_name).

错误消息示例

Error Saving Revision 2
Invalid Key configuration : policy(JWT-Verify-RS256).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 Verify JWT 政策的 <PublicKey><SecretKey> 元素中未定义子元素 <Value> 或必需的子元素 <JWKS>,就会出现此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策的名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256

    Invalid Key configuration : policy(JWT-Verify-RS256).
    
    
  2. 检查失败的 Verify JWT 政策 XML,并验证 <PublicKey><SecretKey> 元素中是否未定义子元素 <Value> 或子元素 <JWKS>。如果未定义子元素,则会导致错误。

    例如,以下政策表明 <PublicKey> 元素未定义子元素 <Value><JWKS>

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <ExpiresIn>1h</ExpiresIn>
        <PublicKey>
        </PublicKey>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='true'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    由于 Verify JWT 政策的 <PublicKey> 元素中未定义子元素 <Value><JWKS>,则会出现以下错误:

    Invalid Key configuration : policy(JWT-Verify-RS256).
    

解决方法

确保 Verify JWT 政策的 <PublicKey> 元素中始终定义了子元素 <Value><JWKS>

如需更正示例 Verify JWT 政策,请在 <PublicKey> 元素下定义子元素 <Value><JWKS>,如下所示:

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PublicKey>
        <Value ref="public.publickey"/>
    </PublicKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</PublicJWT>

EmptyElementForKeyConfiguration

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Empty Element for Key Configuration : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision 2
Empty Element for Key Configuration : policy(JWT-Verify-RS256) element(PublicKey/Value).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 <PublicKey> 元素的子元素 <Value><JWKS> 中的 ref 属性未指定或为空,则会出现此错误。

例如,如果 <PublicKey> 元素的子元素 <Value> 为空,则会出现此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策名称和空元素名称。例如,在以下错误消息中,Verify JWT 政策的名称为 JWT-Verify-RS256,元素名称为 PublicKey/Value

    Empty Element for Key Configuration : policy(JWT-Verify-RS256) element(PublicKey/Value).
    
  2. 检查失败的 Verify JWT 政策 XML,并验证第 1 步中确定的元素是否为空。如果为空,则会导致错误。

    例如,以下政策表明 <PublicKey> 元素的子元素 <Value> 为空:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <ExpiresIn>1h</ExpiresIn>
        <PublicKey>
            <Value/>
        </PublicKey>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='true'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    由于 Verify JWT 政策的 <PublicKey> 元素的子元素 <Value> 为空,则会出现此错误:

    Empty Element for Key Configuration : policy(JWT-Verify-RS256) element(PublicKey/Value).
    
    

解决方法

确保始终指定 <PublicKey> 元素的子元素 <Value><JWKS> 中的 ref 属性。

如需更正示例 Verify JWT 政策,请在 <PublicKey> 元素的子元素 <Value> 中使用流变量 public.publickey

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PublicKey>
        <Value ref="public.publickey"/>
    </PublicKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidConfigurationForVerify

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid configuration element for verify : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision 3
Invalid configuration element for verify : policy(JWT-Verify-HS256) element(SecretKey/Id).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果在 VerifyJWT 政策的 <SecretKey> 元素中定义了元素 <Id>,则会出现此错误。

例如,如果 <SecretKey> 元素中定义了元素 <Id>,则会出现此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策名称和无效元素名称。例如,在以下错误消息中,Verify JWT 政策的名称是 JWT-Verify-RS256,元素名称为 SecretKey/Id

    Invalid configuration element for verify : policy(JWT-Verify-HS256) element(SecretKey/Id)
    
  2. 检查失败的 Verify JWT 政策 XML,并验证第 1 步中确定的无效元素是否已定义。如果已定义,则会导致错误。

    例如,以下政策表明 <SecretKey> 元素的子元素 <Id> 已定义:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <ExpiresIn>1h</ExpiresIn>
        <SecretKey>
            <Value ref="private.secretkey"/>
            <Id/>
        </SecretKey>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='true'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    由于元素 <Id> 在 Verify JWT 政策的 <SecretKey> 元素中定义,则会出现此错误:

    Invalid configuration element for verify : policy(JWT-Verify-HS256) element(SecretKey/Id)
    

解决方法

确保元素 <Id> 从不在 Verify JWT 政策的 <SecretKey> 元素中定义。

如需更正示例 Verify JWT 政策,请从 <SecretKey> 元素中移除子元素 <Id>

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref='private.secretkey'/>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidEmptyElement

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision 
Invalid empty element : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision 3
Invalid empty element : policy(JWT-Verify-HS256) element(Source).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 Verify JWT 政策的 <Source> 元素为空,则会出现此错误。如果存在,则必须使用 Edge 流变量名称进行定义。

诊断

  1. 从错误消息中确定 Verify JWT 政策名称和空元素名称。例如,在以下错误消息中,Verify JWT 政策的名称是 JWT-Verify-RS256,元素名称为 PublicKey/Value

    Invalid empty element : policy(JWT-Verify-HS256) element(Source).
    
  2. 检查失败的 Verify JWT 政策 XML,并验证第 1 步中确定的元素是否为空。如果为空,则会导致错误。

    例如,以下政策显示元素 <Source> 为空:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <ExpiresIn>1h</ExpiresIn>
        <Source></Source>
        <PublicKey>
            <Value ref="public.publickey"/>
        </PublicKey>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
        <AdditionalClaims>
            <Claim name='claim' ref='reqclaim' type='string' array='true'/>
        </AdditionalClaims>
    </VerifyJWT>
    

    由于 Verify JWT 政策的 <Source> 元素为空,则会出现此错误:

    Invalid empty element : policy(JWT-Verify-HS256) element(Source).
    

解决方法

如果 Verify JWT 验证政策的 <Source> 元素存在,请确保它指定了流变量。

如需更正示例 Verify JWT 政策,请在 <Source> 元素中使用有效的流变量:

<VerifyJWT name="JWT-Verify-RS256">
    <DisplayName>JWT Verify RS256</DisplayName>
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>jwt-variable</Source>
    <PublicKey>
        <Value ref="public.publickey"/>
    </PublicKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalHeaders>
        <Claim name='claim' ref='reqclaim' type='string' array='true'/>
    </AdditionalHeaders>
</VerifyJWT>

InvalidPublicKeyValue

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision revision_number
Invalid Public Key Value in Configuration : policy(policy_name) element(element_name).

错误消息示例

Error Saving Revision 2
Invalid Public Key Value in Configuration : policy(JWT-Verify-RS256) element(PublicKey/JWKS).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果 <PublicKey> 元素的子元素 <JWKS> 中使用的值未采用 RFC 7517 中指定的有效格式,则会出现此错误。

例如,在 <PublicKey> 元素下使用 abc 作为子元素 <JWKS> 的值会导致此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策名称和包含无效值的元素名称。例如,在以下错误消息中,Verify JWT 政策的名称是 JWT-Verify-RS256,元素为 PublicKey/JWKS

    Invalid Public Key Value in Configuration : policy(JWT-Verify-RS256) element(PublicKey/JWKS).
    
  2. 检查失败的 Verify JWT 政策 XML,并验证第 1 步中确定的元素是否包含采用 RFC 7517 指定的有效格式的值。如果元素值采用的格式无效,则会导致错误。

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <PublicKey>
            <JWKS>abc<JWKS>
        </PublicKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
    </VerifyJWT>
    

    因为 <PublicKey> 元素子元素 <JWKS> 中的值未采用 RFC 7517 指定的有效格式,则会出现此错误:

    Invalid Public Key Value in Configuration : policy(JWT-Verify-RS256) element(PublicKey/JWKS).
    

解决方法

确保 <PublicKey> 元素的子元素 <JWKS> 中指定的值是采用有效 JWKS 格式 (RFC 7517) 的有效字符串或流变量。

如需更正示例 Verify JWT 政策,请更改 <JWKS> 的值,如下所示:

    <VerifyJWT name="JWT-Verify-RS256">
        <DisplayName>JWT Verify RS256</DisplayName>
        <Algorithm>RS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <PublicKey>
        <JWKS>eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM</JWKS>
        </PublicKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
        <Id/>
    </VerifyJWT>

InvalidConfigurationForActionAndAlgorithm

错误消息

通过 Edge 界面或 Edge Management API 部署 API 代理失败,并显示以下错误消息:

Error Saving Revision <var>revision_number</var>
Invalid configuration element for this action and algorithm Family: policy(<var>policy_name</var>) element(<var>element_name</var>) action(<var>action_name</var>) family(<var>family_name</var>).

错误消息示例

Error Saving Revision
Invalid configuration element for this action and algorithm Family: policy(JWT-Verify-HS256) element(PublicKey) action(Verify) family(RSA).

示例屏幕截图

在 Edge 界面中,您将看到一个包含以下错误的对话框:

原因

如果将 <PublicKey> 元素与 HS 系列算法搭配使用,而 <SecretKey> 元素与 RSA 系列算法搭配使用,则会发生此错误。如果这些条件中的任意一个为 true,也会出现此错误。

例如,如果将 <PublicKey> 元素与 HS 系列算法搭配使用,就会导致此错误。

诊断

  1. 从错误消息中确定 Verify JWT 政策名称、元素名称和算法系列名称。例如,在以下错误消息中,验证 Verify JWT 政策的名称为 JWT-Verify-HS256,元素名称为 PublicKey,算法系列为 RSA

    Invalid configuration element for this action and algorithm Family: policy(JWT-Verify-HS256) element(PublicKey) action(Verify) family(RSA).
    
  2. 验证失败的 Verify JWT 政策 XML 中使用的元素和算法系列是否与第 1 步错误消息中指出的元素和算法系列匹配。例如,以下政策将元素指定为 PublicKey,算法系列指定为 HMAC,这与错误消息中的内容匹配

    <VerifyJWT name="JWT-Verify-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Algorithm>HS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Source>request.formparam.jwt</Source>
        <PublicKey>
            <Value ref="var-value"/>
        </PublicKey>
        <SecretKey>
            <Value ref="private.secretkey"/>
        </SecretKey>
            <ExpiresIn>1h</ExpiresIn>
            <Subject>monty-pythons-flying-circus</Subject>
            <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
            <Audience>fans</Audience>
        </VerifyJWT>
    
  3. 如果 <Algorithm> 元素的值为 HS256,但您使用了 <PublicKey>,则会导致错误。

    在上文所示的示例 Verify JWT 政策中,即使 <Algorithm> 设为系列算法 HS256,但仍使用 <PublicKey> 元素,则会导致以下错误:

    Invalid configuration element for this action and algorithm Family: policy(JWT-Verify-HS256) element(PublicKey) action(Verify) family(RSA).
    

解决方法

确保 <PublicKey> 元素仅与 RSA 系列算法配合使用,<SecretKey> 元素仅于 HS 系列算法配合使用。

如需更正示例 Verify JWT 政策,请使用采用 HS256 算法的 VerifyJWT 政策中的 <SecretKey>

    <VerifyJWT name="JWT-Verify-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Algorithm>HS256</Algorithm>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Source>request.formparam.jwt</Source>
        <SecretKey>
        <Value ref="private.secretkey"/>
    </SecretKey>
        <ExpiresIn>1h</ExpiresIn>
        <Subject>monty-pythons-flying-circus</Subject>
        <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
        <Audience>fans</Audience>
    </VerifyJWT>