In some cases it is desirable to offer a Policy Enforcement Point for a generic HTTP gateway.
In order to enable interoperability with AuthZEN the values of generic HTTP requests need to be consistently mapped to the AuthZEN Information Model.
To ensure optimal interoperability this extension defines a uniform mapping of HTTP request properties to the AuthZEN Information Model.
In the section below we describe what information regarding a generic HTTP request can or must be included in the subject
section of the evaluation request.
If no domain-specific interpretation of subject ID is available you must use ip-address
as type
and the IP address in accordance with RFC4001 as id
.
For example:
{
"type": "ip-address",
"id": "127.0.0.1"
}
In the section below we describe what information regarding a generic HTTP request can or must be included in the action
section of the evaluation request.
Use the HTTP Request Method as the name of the action.
For example:
{ "name": "POST" }
If the HTTP request contains Content, such as a Message Body for a PUT or POST request, included it in the optional properties under the request_content
field within the http
field. The value must be Base64 encoded.
For example:
{
"name": "POST",
"properties": {
"http": {
"request_content": "YnNuPTEyMzQ1Njc4Mg=="
}
}
}
In the section below we describe what information regarding a generic HTTP request can or must be included in the resource
section of the evaluation request.
For the reource type
use the identifier uri
.
For the resource id
use the Uniform Resource Identifier without query
and fragment
.
For example, the URI https://example.com:8443/application/resources/1?active=true
would result in:
{
"type": "uri",
"id": "https://example.com:8443/application/resources/1"
}
Components of the URI should be included in the optional properties. Use the ABNF rule name of the URI component the field name within the http
field.
The following components must be included if they are present: scheme
, userinfo
, host
, port
, path
, fragment
.
For example, the URI https://example.com:8443/application/resources/1?active=true
would result in:
{
"type": "uri",
"id": "https://example.com:8443/application/resources/1",
"properties": {
"http": {
"scheme": "https",
"host": "example.com",
"port": "8443",
"path": "/application/resources/1",
"query": "active=true"
}
}
}
HTTP Query Parameters are frequently used as a convention to pass key-value pairs with requests.
These must be made available as a JSON object in the parameters
field within the http
field according to the following algorithm:
&
) character.=
) or the end of the token form the parameter key.=
) form the parameter value. If the token does not contain an equals sign, the parameter value is a JSON null
value.For example, the query parameter:
active=true&filter=last_name%3DJanssen&filter&filter=geboortejaar%3C2000&test%26%3D=%0A%22&expand
would result in
{
"properties": {
"http": {
"parameters": {
"active": "true",
"filter": [
"last_name=Janssen",
null,
"geboortejaar<2000"
],
"test&=": "\n\""
"expand": null
}
}
}
}
In the section below we describe what information regarding a generic HTTP request can or must be included in the context
section of the evaluation request.
The HTTP Headers must be included as an array of Field Lines under the headers
field within the http
field.
For example:
{
"http": {
"headers": [
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding: gzip, deflate, br, zstd"
"Host: www.example.com",
"Connection: keep-alive"
]
}
}
If available, the HTTP version must be included under the version
field within the http
field as a value in accordance with RFC9110 .
For example:
{
"http": {
"version": "HTTP/2"
}
}
If available, the client-side X509 certificate may be included under the client_certificate
field within the http
field in PEM format.
For example:
{
"http": {
"client_certificate": "-----BEGIN CERTIFICATE-----\nMII......\n-----END CERTIFICATE----- "
}
}
If desired, selected components of the client certificate may be made available as a JSON objects under the client_certificate
field.
The ASN.1 data type of the certificate as defined by Section 7.2.1 in X509 19/10 must be used for this.
The components serialNumber
, issuer
, subject
, validity
are required. Within validity notBefore
and notAfter
components are required. Additional components may be included.
The below rules must be followed for representing ASN.1 data types in JSON:
Time
data type must be represented as a string containing an ISO 8601 format with qualified timezone.NUMBER
data type must be represented as numeric value.EXTENSION
data type must be modeled as an object with a single field with the name of the ASN.1 type identifier. E.g. { "subjectAltName": .... }
.CHOICE
data type must be represented as an object with a single field with the name of the ASN.1 choice identifier. E.g. {"dNSName": "www.example.com"}
.ENUMERATED
data type must be represented as a string with the name of the enumerated value.SEQUENCE
data type with named values must be represented as object with field names identical to the named values. Variable length values within the sequence must be represented as array values.SEQUENCE
data type must be represented as an array of values.NUMBER
data type must be represented as numeric value.BOOLEAN
data type must be represented as a boolean value.BIT STRING
data type with named values must be represented as an array containing strings of the names of the flags.BIT STRING
and OCTET STRING
data types are represented as hex-encoded bytes separated by a colon.See the below example demonstrating the various data types as used in X09 certificates:
"client_certificate": {
"serialNumber": 12345,
"issuer": "C=US, O=Let's Encrypt, CN=R10",
"subject": "CN=testuser",
"validity": {
"notBefore":"2000-01-01T00:00:00Z",
"notAfter":"2002-12-31T23:59:99Z"
},
"extensions": [
{
"subjectAltName": [
{
"dNSName": "www.example.com"
},
{
"dNSName": "smtp.example.com"
}
]
},
{
"keyUsage": [
"digitalSignature",
"keyEncipherment"
]
},
{
"authorityKeyIdentifier": {
"keyIdentifier": "12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78"
}
},
{
"basicConstraints": {
"cA": true,
"pathLenConstraints": [1, 2, 3]
}
}
]
}