The TNAuthList Authority Token is a profile instance of the ACME Authority Token defined in [
RFC 9447].
The TNAuthList Authority Token protected header
MUST comply with "Request Authentication" (
Section 6.2 of
RFC 8555).
The TNAuthList Authority Token Payload
MUST include the mandatory claims "exp", "jti", and "atc" and
MAY include the optional claims defined for the Authority Token detailed in the next subsections.
The "iss" claim is an optional claim defined in
RFC 7519,
Section 4.1.1. It can be used as a URL identifying the Token Authority that issued the TNAuthList Authority Token beyond the "x5u" or other header claims that identify the location of the certificate or certificate chain of the Token Authority used to validate the TNAuthList Authority Token.
The "exp" claim, defined in
RFC 7519,
Section 4.1.4,
MUST be included and contains the DateTime value of the ending date and time that the TNAuthList Authority Token expires.
The "jti" claim, defined in
RFC 7519,
Section 4.1.7,
MUST be included and contains a unique identifier for this TNAuthList Authority Token transaction.
The "atc" claim
MUST be included and is defined in [
RFC 9447]. It contains a JSON object with the following elements:
-
a "tktype" key with a string value equal to "TNAuthList" to represent a TNAuthList profile of the Authority Token [RFC 9447] defined by this document. "tktype" is a required key and MUST be included.
-
a "tkvalue" key with a string value equal to the base64url encoding of the TNAuthList certificate extension ASN.1 object using DER encoding rules. "tkvalue" is a required key and MUST be included.
-
a "ca" key with a boolean value set to either true when the requested certificate is allowed to be a CA cert for delegation uses or false when the requested certificate is not intended to be a CA cert, only an end-entity certificate. "ca" is an optional key; if not included, the "ca" value is considered false by default.
-
a "fingerprint" key constructed as defined in RFC 8555, Section 8.1, corresponding to the computation of the "Thumbprint" step using the ACME account key credentials. "fingerprint" is a required key and MUST be included.
An example of the TNAuthList Authority Token is as follows:
{
"protected": base64url({
"typ":"JWT",
"alg":"ES256",
"x5u":"https://authority.example.org/cert"
}),
"payload": base64url({
"iss":"https://authority.example.org",
"exp":1640995200,
"jti":"id6098364921",
"atc":{"tktype":"TNAuthList",
"tkvalue":"F83n2a...avn27DN3",
"ca":false,
"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:
D3:BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"}
}),
"signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ"
}
Following
RFC 9447,
Section 5, the Authority Token should be acquired using a RESTful HTTP POST transaction as follows:
POST /at/account/:id/token HTTP/1.1
Host: authority.example.org
Content-Type: application/json
The request will pass the account identifier as a string in the request parameter "id". This string will be managed as an identifier specific to the Token Authority's relationship with a Communications Service Provider (CSP). There is assumed to also be a corresponding authentication procedure that can be verified for the success of this transaction, for example, an HTTP authorization header containing valid authorization credentials, as defined in
RFC 9110,
Section 11.6.2.
The body of the POST request
MUST contain a JSON object with key value pairs corresponding to values that are requested as the content of the claims in the issued token. As an example, the body
SHOULD contain a JSON object as follows:
{
"tktype":"TNAuthList",
"tkvalue":"F83n2a...avn27DN3",
"ca":false,
"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:D3
:BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"
}
If successful, the response to the POST request returns a 200 (OK) with a JSON body that contains, at a minimum, the TNAuthList Authority Token as a JSON object with a key of "token" and the base64url-encoded string representing the atc token. JSON is easily extensible, so users of this specification may want to pass other pieces of information relevant to a specific application.
An example of a successful response would be as follows:
HTTP/1.1 200 OK
Content-Type: application/json
{"token": "DGyRejmCefe7v4N...vb29HhjjLPSggwiE"}
If the request is not successful, the response should indicate the error condition. Specifically, for the case that the authorization credentials are invalid or if the account identifier provided does not exist, the response code
MUST be 403 (Forbidden). Other 4xx and 5xx responses
MUST follow standard HTTP error condition conventions [
RFC 9110].
When creating the TNAuthList Authority Token, the Token Authority
MUST validate that the information contained in the ASN.1 TNAuthList accurately represents the service provider code (SPC) or telephone number (TN) resources the requesting party is authorized to represent based on their pre-established, verified, and secure relationship between the Token Authority and the requesting party. Note that the fingerprint in the token request is not meant to be verified by the Token Authority but rather is meant to be signed as part of the token so that the party that requests the token can, as part of the challenge response, allow the ACME server to validate that the token requested and used came from the same party that controls the ACME client.
Because this specification specifically involves the TNAuthList defined in [
RFC 8226], which involves SPC, telephone number ranges, and individual telephone numbers, the client may also request an Authority Token with some subset of its own authority as the TNAuthList provided in the "tkvalue" element in the "atc" JSON object. Generally, the scope of authority representing a CSP is represented by a particular SPC (e.g., in North America, an operating company number (OCN) or service provider identifier (SPID)). Based on number allocations, that provider is also generally associated with a particular set of different telephone number ranges and/or telephone numbers. The TNAuthList can be constructed to define a limited scope of the TelephoneNumberRanges or TelephoneNumbers (
RFC 8226,
Section 9) either associated with an SPC or with the scope of telephone number ranges or telephone numbers the client has authority over.
As recommended in the Security Considerations section in [
RFC 9447], an Authority Token can either have a scope that attests all of the resources that a client is eligible to receive certificates for or potentially a more limited scope that is intended to capture only those resources for which a client will receive a certificate from a particular certification authority. Any certification authority that sees an Authority Token can learn information about the resources a client can claim. In cases where this incurs a privacy risk, Authority Token scopes should be limited to only the resources that will be attested by the requested ACME certificate.