{
  "encassConfigs": [
    {
      "goid": "e1f2a3b4bbbb4ccc9dddeeeeffff0011",
      "guid": "e1f2a3b4-bbbb-4ccc-9ddd-eeeeffff0011",
      "name": "JWTValidation-1.0",
      "description": "Validates a JWT supplied as Authorization: Bearer using gateway-stored Recipient Keys looked up by the JWT's kid header (KeyGoid 00..ffff). After successful signature verification, validates iss matches the publisher-supplied expectedIssuer (case-sensitive equality), aud CONTAINS the publisher-supplied expectedAudience (works for both string aud and array aud), and optionally verifies the JWT scope claim CONTAINS the publisher-supplied allowedScopes (space-separated). Returns 401 on any failure with a JSON error body and sets portal.analytics.response.code. Sets portal.analytics.authType=JWT and portal.analytics.apikey from the JWT 'sub' claim. The IdP signing certificate(s) must be pre-loaded into the gateway via Manage Certificates with the Recipient Key role; for a JWKS-URL-based variant that fetches keys at runtime, see the README.",
      "policyName": "JWTValidation-1.0",
      "encassArgs": [
        {
          "name": "portal.managed.service.apiId",
          "type": "STRING",
          "ordinal": 1,
          "guiPrompt": false
        },
        {
          "name": "expectedIssuer",
          "type": "STRING",
          "ordinal": 2,
          "guiPrompt": true,
          "guiLabel": "Expected JWT Issuer (iss claim) *"
        },
        {
          "name": "expectedAudience",
          "type": "STRING",
          "ordinal": 3,
          "guiPrompt": true,
          "guiLabel": "Expected JWT Audience (aud claim) *"
        },
        {
          "name": "allowedScopes",
          "type": "STRING",
          "ordinal": 4,
          "guiPrompt": true,
          "guiLabel": "Allowed Scope(s) (space-separated, optional)"
        }
      ],
      "encassResults": [
        {
          "name": "errorMsg",
          "type": "STRING"
        },
        {
          "name": "portal.analytics.action",
          "type": "STRING"
        },
        {
          "name": "portal.analytics.api.uuid",
          "type": "STRING"
        },
        {
          "name": "portal.analytics.apikey",
          "type": "STRING"
        },
        {
          "name": "portal.analytics.authType",
          "type": "STRING"
        },
        {
          "name": "portal.analytics.response.code",
          "type": "STRING"
        },
        {
          "name": "claim.iss.result",
          "type": "STRING"
        },
        {
          "name": "claim.aud.result",
          "type": "STRING"
        },
        {
          "name": "claim.scope.result",
          "type": "STRING"
        },
        {
          "name": "claim.sub.result",
          "type": "STRING"
        }
      ],
      "properties": [
        {
          "name": "allowTracing",
          "value": "false"
        },
        {
          "name": "paletteFolder",
          "value": "customAssertions"
        },
        {
          "name": "passMetricsToParent",
          "value": "false"
        }
      ]
    }
  ],
  "policies": [
    {
      "goid": "f2a3b4c5cccc4ddd9eeeffff00112233",
      "guid": "f2a3b4c5-cccc-4ddd-9eee-ffff00112233",
      "name": "JWTValidation-1.0",
      "policyType": "FRAGMENT",
      "enabled": true,
      "folderPath": "/Portal Templates",
      "soap": false,
      "policy": {
        "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<wsp:Policy xmlns:L7p=\"http://www.layer7tech.com/ws/policy\" xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2002/12/policy\">\n    <wsp:All wsp:Usage=\"Required\">\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 1: init analytics + working vars\"/></L7p:CommentAssertion>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"JHtyZXF1ZXN0Lmh0dHAudXJpfQ==\"/>\n            <L7p:VariableToSet stringValue=\"portal.analytics.action\"/>\n        </L7p:SetVariable>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"JHtwb3J0YWwubWFuYWdlZC5zZXJ2aWNlLmFwaUlkfQ==\"/>\n            <L7p:VariableToSet stringValue=\"portal.analytics.api.uuid\"/>\n        </L7p:SetVariable>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"SldU\"/>\n            <L7p:VariableToSet stringValue=\"portal.analytics.authType\"/>\n        </L7p:SetVariable>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"\"/>\n            <L7p:VariableToSet stringValue=\"errorStatus\"/>\n        </L7p:SetVariable>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"\"/>\n            <L7p:VariableToSet stringValue=\"errorMsg\"/>\n        </L7p:SetVariable>\n        <L7p:SetVariable>\n            <L7p:Base64Expression stringValue=\"JHtyZXF1ZXN0Lmh0dHAuaGVhZGVyLmF1dGhvcml6YXRpb259\"/>\n            <L7p:VariableToSet stringValue=\"jwt.token\"/>\n        </L7p:SetVariable>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 2: strip 'Bearer ' prefix from Authorization header\"/></L7p:CommentAssertion>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <L7p:Regex>\n                <L7p:AutoTarget booleanValue=\"false\"/>\n                <L7p:OtherTargetMessageVariable stringValue=\"jwt.token\"/>\n                <L7p:Regex stringValue=\"^Bearer\\s+\"/>\n                <L7p:Replace booleanValue=\"true\"/>\n                <L7p:Replacement stringValue=\"\"/>\n                <L7p:Target target=\"OTHER\"/>\n            </L7p:Regex>\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:SetVariable>\n                    <L7p:Base64Expression stringValue=\"NDAx\"/>\n                    <L7p:VariableToSet stringValue=\"errorStatus\"/>\n                </L7p:SetVariable>\n                <L7p:SetVariable>\n                    <L7p:Base64Expression stringValue=\"TWlzc2luZyBvciBtYWxmb3JtZWQgQXV0aG9yaXphdGlvbiBCZWFyZXIgdG9rZW4u\"/>\n                    <L7p:VariableToSet stringValue=\"errorMsg\"/>\n                </L7p:SetVariable>\n            </wsp:All>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 3: decode + verify signature using gateway-stored Recipient Keys (KeyGoid 00..ffff = lookup by JWT kid). Pre-load the IdP signing certs via Manage Certificates.\"/></L7p:CommentAssertion>\n            <wsp:OneOrMore wsp:Usage=\"Required\">\n                <L7p:DecodeJsonWebToken>\n                    <L7p:FailUnverifiedSignature booleanValue=\"true\"/>\n                    <L7p:KeyGoid goidValue=\"0000000000000000ffffffffffffffff\"/>\n                    <L7p:SourcePayload stringValue=\"${jwt.token}\"/>\n                    <L7p:TargetVariablePrefix stringValue=\"jwt\"/>\n                    <L7p:ValidationType stringValue=\"Using Recipient Key From List\"/>\n                </L7p:DecodeJsonWebToken>\n                <wsp:All wsp:Usage=\"Required\">\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"NDAx\"/>\n                        <L7p:VariableToSet stringValue=\"errorStatus\"/>\n                    </L7p:SetVariable>\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"SldUIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIChvciBzaWduaW5nIGtleSBub3QgZm91bmQgaW4gZ2F0ZXdheSByZWNpcGllbnQga2V5cyku\"/>\n                        <L7p:VariableToSet stringValue=\"errorMsg\"/>\n                    </L7p:SetVariable>\n                </wsp:All>\n            </wsp:OneOrMore>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 4: cast jwt.payload to message + extract iss/aud/scope/sub claims via JsonPath\"/></L7p:CommentAssertion>\n            <L7p:SetVariable>\n                <L7p:Base64Expression stringValue=\"JHtqd3QucGF5bG9hZH0=\"/>\n                <L7p:ContentType stringValue=\"application/json; charset=utf-8\"/>\n                <L7p:DataType variableDataType=\"message\"/>\n                <L7p:VariableToSet stringValue=\"jwt.payload.json\"/>\n            </L7p:SetVariable>\n            <L7p:EvaluateJsonPathExpression>\n                <L7p:Expression stringValue=\"iss\"/>\n                <L7p:OtherTargetMessageVariable stringValue=\"jwt.payload.json\"/>\n                <L7p:Target target=\"OTHER\"/>\n                <L7p:VariablePrefix stringValue=\"claim.iss\"/>\n            </L7p:EvaluateJsonPathExpression>\n            <L7p:EvaluateJsonPathExpression>\n                <L7p:Expression stringValue=\"aud\"/>\n                <L7p:OtherTargetMessageVariable stringValue=\"jwt.payload.json\"/>\n                <L7p:Target target=\"OTHER\"/>\n                <L7p:VariablePrefix stringValue=\"claim.aud\"/>\n            </L7p:EvaluateJsonPathExpression>\n            <L7p:EvaluateJsonPathExpression>\n                <L7p:Expression stringValue=\"scope\"/>\n                <L7p:OtherTargetMessageVariable stringValue=\"jwt.payload.json\"/>\n                <L7p:Target target=\"OTHER\"/>\n                <L7p:VariablePrefix stringValue=\"claim.scope\"/>\n            </L7p:EvaluateJsonPathExpression>\n            <L7p:EvaluateJsonPathExpression>\n                <L7p:Expression stringValue=\"sub\"/>\n                <L7p:OtherTargetMessageVariable stringValue=\"jwt.payload.json\"/>\n                <L7p:Target target=\"OTHER\"/>\n                <L7p:VariablePrefix stringValue=\"claim.sub\"/>\n            </L7p:EvaluateJsonPathExpression>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 5: validate iss claim equals expectedIssuer (case-sensitive)\"/></L7p:CommentAssertion>\n            <wsp:OneOrMore wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"true\"/>\n                    <L7p:Expression1 stringValue=\"${claim.iss.result}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:CaseSensitive booleanValue=\"true\"/><L7p:RightValue stringValue=\"${expectedIssuer}\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n                <wsp:All wsp:Usage=\"Required\">\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"NDAx\"/>\n                        <L7p:VariableToSet stringValue=\"errorStatus\"/>\n                    </L7p:SetVariable>\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"SldUIGlzc3VlciBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB2YWx1ZS4=\"/>\n                        <L7p:VariableToSet stringValue=\"errorMsg\"/>\n                    </L7p:SetVariable>\n                </wsp:All>\n            </wsp:OneOrMore>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 6: validate aud claim CONTAINS expectedAudience (works for both string aud and array aud, since the JsonPath result for an array is its JSON text)\"/></L7p:CommentAssertion>\n            <wsp:OneOrMore wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"true\"/>\n                    <L7p:Expression1 stringValue=\"${claim.aud.result}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:CaseSensitive booleanValue=\"true\"/><L7p:Operator operator=\"CONTAINS\"/><L7p:RightValue stringValue=\"${expectedAudience}\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n                <wsp:All wsp:Usage=\"Required\">\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"NDAx\"/>\n                        <L7p:VariableToSet stringValue=\"errorStatus\"/>\n                    </L7p:SetVariable>\n                    <L7p:SetVariable>\n                        <L7p:Base64Expression stringValue=\"SldUIGF1ZGllbmNlIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHZhbHVlLg==\"/>\n                        <L7p:VariableToSet stringValue=\"errorMsg\"/>\n                    </L7p:SetVariable>\n                </wsp:All>\n            </wsp:OneOrMore>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 7 (optional): if allowedScopes is non-empty, require the JWT scope claim to CONTAIN it. This is a substring check; for strict per-scope membership use a regex assertion.\"/></L7p:CommentAssertion>\n            <wsp:OneOrMore wsp:Usage=\"Required\">\n                <wsp:All wsp:Usage=\"Required\">\n                    <L7p:ComparisonAssertion>\n                        <L7p:CaseSensitive booleanValue=\"false\"/>\n                        <L7p:Expression1 stringValue=\"${allowedScopes}\"/>\n                        <L7p:Operator operatorNull=\"null\"/>\n                        <L7p:Predicates predicates=\"included\">\n                            <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                            <L7p:item binary=\"included\"><L7p:Negated booleanValue=\"true\"/><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                        </L7p:Predicates>\n                    </L7p:ComparisonAssertion>\n                <wsp:OneOrMore wsp:Usage=\"Required\">\n                    <L7p:ComparisonAssertion>\n                        <L7p:CaseSensitive booleanValue=\"true\"/>\n                        <L7p:Expression1 stringValue=\"${claim.scope.result}\"/>\n                        <L7p:Operator operatorNull=\"null\"/>\n                        <L7p:Predicates predicates=\"included\">\n                            <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                            <L7p:item binary=\"included\"><L7p:CaseSensitive booleanValue=\"true\"/><L7p:Operator operator=\"CONTAINS\"/><L7p:RightValue stringValue=\"${allowedScopes}\"/></L7p:item>\n                        </L7p:Predicates>\n                    </L7p:ComparisonAssertion>\n                    <wsp:All wsp:Usage=\"Required\">\n                        <L7p:SetVariable>\n                            <L7p:Base64Expression stringValue=\"NDAx\"/>\n                            <L7p:VariableToSet stringValue=\"errorStatus\"/>\n                        </L7p:SetVariable>\n                        <L7p:SetVariable>\n                            <L7p:Base64Expression stringValue=\"SldUIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJlcXVpcmVkIHNjb3BlKHMpLg==\"/>\n                            <L7p:VariableToSet stringValue=\"errorMsg\"/>\n                        </L7p:SetVariable>\n                    </wsp:All>\n                </wsp:OneOrMore>\n                </wsp:All>\n                <L7p:TrueAssertion/>\n            </wsp:OneOrMore>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n        <L7p:CommentAssertion><L7p:Comment stringValue=\"Step 8: set portal.analytics.apikey to the JWT 'sub' claim (most useful identifier for analytics in a JWT-only flow).\"/></L7p:CommentAssertion>\n            <L7p:SetVariable>\n                <L7p:Base64Expression stringValue=\"JHtjbGFpbS5zdWIucmVzdWx0fQ==\"/>\n                <L7p:VariableToSet stringValue=\"portal.analytics.apikey\"/>\n            </L7p:SetVariable>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:ComparisonAssertion>\n                    <L7p:CaseSensitive booleanValue=\"false\"/>\n                    <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                    <L7p:Operator operatorNull=\"null\"/>\n                    <L7p:Predicates predicates=\"included\">\n                        <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                        <L7p:item binary=\"included\"><L7p:Negated booleanValue=\"true\"/><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                    </L7p:Predicates>\n                </L7p:ComparisonAssertion>\n                <L7p:SetVariable>\n                    <L7p:Base64Expression stringValue=\"JHtlcnJvclN0YXR1c30=\"/>\n                    <L7p:VariableToSet stringValue=\"portal.analytics.response.code\"/>\n                </L7p:SetVariable>\n            </wsp:All>\n            <L7p:TrueAssertion/>\n        </wsp:OneOrMore>\n        <L7p:ExportVariables>\n            <L7p:ExportedVars stringArrayValue=\"included\">\n                <L7p:item stringValue=\"errorMsg\"/>\n                <L7p:item stringValue=\"portal.analytics.action\"/>\n                <L7p:item stringValue=\"portal.analytics.api.uuid\"/>\n                <L7p:item stringValue=\"portal.analytics.apikey\"/>\n                <L7p:item stringValue=\"portal.analytics.authType\"/>\n                <L7p:item stringValue=\"portal.analytics.response.code\"/>\n                <L7p:item stringValue=\"claim.iss.result\"/>\n                <L7p:item stringValue=\"claim.aud.result\"/>\n                <L7p:item stringValue=\"claim.scope.result\"/>\n                <L7p:item stringValue=\"claim.sub.result\"/>\n            </L7p:ExportedVars>\n        </L7p:ExportVariables>\n        <wsp:OneOrMore wsp:Usage=\"Required\">\n            <L7p:ComparisonAssertion>\n                <L7p:CaseSensitive booleanValue=\"false\"/>\n                <L7p:Expression1 stringValue=\"${errorStatus}\"/>\n                <L7p:Operator operatorNull=\"null\"/>\n                <L7p:Predicates predicates=\"included\">\n                    <L7p:item dataType=\"included\"><L7p:Type variableDataType=\"string\"/></L7p:item>\n                    <L7p:item binary=\"included\"><L7p:Operator operator=\"EMPTY\"/><L7p:RightValue stringValue=\"\"/></L7p:item>\n                </L7p:Predicates>\n            </L7p:ComparisonAssertion>\n            <wsp:All wsp:Usage=\"Required\">\n                <L7p:CustomizeErrorResponse>\n                    <L7p:Content stringValue='{&quot;error&quot;:{&quot;code&quot;:${errorStatus},&quot;message&quot;:&quot;${errorMsg}&quot;}}'/>\n                    <L7p:ContentType stringValue=\"application/json\"/>\n                    <L7p:ExtraHeaders nameValuePairArray=\"included\"/>\n                    <L7p:HttpStatus stringValue=\"${errorStatus}\"/>\n                </L7p:CustomizeErrorResponse>\n                <L7p:FalseAssertion/>\n            </wsp:All>\n        </wsp:OneOrMore>\n    </wsp:All>\n</wsp:Policy>\n"
      }
    }
  ],
  "properties": {
    "defaultAction": "NEW_OR_UPDATE",
    "meta": {
      "name": "JWTValidation-1.0 Bundle",
      "schema": "11.2.1"
    },
    "mappings": {}
  }
}