<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="yes"?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-gould-regext-auth-token-00" ipr="trust200902" submissionType="IETF" consensus="true" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="EPP Authentication Token Mapping">
     Extensible Provisioning Protocol (EPP) Authentication Token Mapping</title>
    <seriesInfo name="Internet-Draft" value="draft-gould-regext-auth-token-00"/>
    <author fullname="James Gould" initials="J." surname="Gould">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>United States of America</country>
        </postal>
        <email>jgould@verisign.com</email>
        <uri>http://www.verisign.com</uri>
      </address>
    </author>
    <author fullname="Poonam Garg" initials="P." surname="Garg">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>United States of America</country>
        </postal>
        <email>pogarg@verisign.com</email>
        <uri>http://www.verisign.com</uri>
      </address>
    </author>
    <author fullname="Mohammad Suhale Malang Khader" initials="M.S." surname="Malang Khader">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>United States of America</country>
        </postal>
        <email>mmalangkhader@verisign.com</email>
        <uri>http://www.verisign.com</uri>
      </address>
    </author>
    <area>General</area>
    <keyword>EPP</keyword>
    <keyword>Extensible Provisioning Protocol</keyword>
    <keyword>XML</keyword>
    <keyword>EAT</keyword>
    <keyword>Authentication</keyword>
    <keyword>Token</keyword>
    <keyword>JWT</keyword>
    <keyword>JWS</keyword>
    <abstract>
      <t>This document describes an Extensible Provisioning Protocol (EPP) mapping for provisioning and management of EPP Authentication Token objects 
      in a shared central repository, where an Authentication Token is a JSON Web Signature (JWS), defined in RFC 7515, and is used to authorize actions by registrar users.  
      The Authentication Token can be 
      passed over an authenticated EPP session, as defined in RFC 5730, to provide elevated, fine-grained authorization exclusively valid until the lifetime of 
      the digitally signed Authentication Token. 
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document describes an Extensible Provisioning Protocol (EPP) mapping for provisioning and management of EPP Authentication Token objects 
      in a shared central repository, where an Authentication Token is a <xref target="RFC7515">JSON Web Signature (JWS) </xref>, which uses JWS Compact Serialization
      and is embedded as a string in the EPP XML to authorize actions by registrar users.  The Authentication Token can be 
      passed over an authenticated EPP session, as defined in <xref target="RFC5730"/>, to provide granular, time-bound authorization
      till the lifetime of the digitally signed Authentication Token.</t>
      <t>This document describes a EPP Authentication Token object mapping for version 1.0 of the Extensible Provisioning Protocol (EPP) <xref target="RFC5730"/>. 
      This mapping is specified using the XML 1.0 as described in 
      <xref target="W3C.REC-xml-20040204"/> and XML Schema notation as described in 
      <xref target="W3C.REC-xmlschema-1-20041028"/> and 
      <xref target="W3C.REC-xmlschema-2-20041028"/>.</t>
      <section numbered="true" toc="default">
        <name>Conventions Used in This Document</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
        "OPTIONAL" in this document are to be interpreted as described in
        <xref target="BCP14"/> when, and only when, they appear in all capitals, as
        shown here.</t>
        <t>In examples, "C:" represents lines sent by a protocol client and "S:"
        represents lines returned by a protocol server.  Indentation and white
        space in examples is provided only to illustrate element relationships
        and is not a REQUIRED feature of this specification.</t>
        <t>XML is case sensitive.  Unless stated otherwise, XML specifications
        and examples provided in this document MUST be interpreted in the
        character case presented to develop a conforming implementation.</t>
        <t>The XML namespace prefix "authToken" is used for the namespace
        "urn:ietf:params:xml:ns:epp:authToken-0.1", but implementations MUST NOT
        depend on it; instead, they should employ a proper namespace-aware
        XML parser and serializer to interpret and output the XML documents.</t>
        <t>Cryptographic algorithms and identifiers for use with this
   specification are described in the separate JSON Web Algorithms (JWA)
   <xref target="RFC7518"/> specification and an IANA registry defined by that
   specification.</t>
        <t>The line breaks in the JWS Compact Serialization values are used only 
        illustration purposes and MUST NOT be used in a conforming implementation.</t>
      </section>
      <section numbered="true" toc="default">
        <name>Registrar User</name>
        <t><xref target="RFC8499"/> defines the registrar as "a service provider that acts as a go-between for registrants and registries." and defines 
        the registrant and registry.  A registrar can have many users that interface with the registry across many channels, such as EPP and Web User Interface (UI), which is referred to as a Registrar User in this document.
        The EPP client in <xref target="RFC5730"/>, referred to as the EPP Registrar User is this document, is a registrar system that uses the EPP Registrar User credentials to authenticate with the &lt;login&gt; command to establish an EPP session.
        The Registrar User authenticates to create the Authentication Token that MUST be a Registrar 
        User other than the EPP Registrar User since the EPP Registrar User is used only to create the EPP session.</t>
      </section>
    </section>
    <section anchor="attrs" numbered="true" toc="default">
      <name>Object Attributes</name>
      <t>An Authentication Token has attributes and associated values that is generated and signed by the server and may
   be viewed and verified by the sponsoring client or the server.  This section 
      describes each attribute type in detail. The formal
      syntax for the attribute values described here can be found in the
      "Formal Syntax" section of this document and in the appropriate
      normative references.</t>
      <section anchor="authentication-token">
        <name>Authentication Token</name>
        <t>The Authentication Token uses JSON Web Signature (JWS), defined in <xref target="RFC7515"/>, with JWS Compact Serialization, defined in Section 3.1 of <xref target="RFC7515"/>, to digitally sign 
        the JWS Protected Header properties and JWS Payload claims in a single string that is embedded in an EPP XML element.  The following sections define the JWS Protected Header and the JWS Payload JSON members.
        </t>
        <t keepWithNext="true">Example Authentication Token that is serialized using JWS Compact Serialization, where the JWS Protected Header, 
            the JWS Payload, and the JWS Signature using ES512 are separated with a period ('.'):</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVNUR
U0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaWVudF
kiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxLVJPIiw
iU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLll2Jzxbw0
0919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4YMyVvykFvAJ
m-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z5PFZeR5k-Scm
DEDdFl9nIFCLd5-mF
            ]]></artwork>
        <section anchor="authentication-token-header">
          <name>Authentication Token Header</name>
          <t>The Authentication Token Header is a JWS Protected Header that is protected by the JWS Signature and follows the format of a JOSE Header, defined in Section 4 of <xref target="RFC7515"/>.
          The following Header Parameter Names are used in the Authentication Token Header:</t>
          <ul>
            <li>"alg": The "alg" (Algorithm) Header Parameter, defined in Section 4.1.1 of <xref target="RFC7515"/>, identifies the cryptographic algorithm used to secure the Authentication Token.
            A list of defined "alg" values for this use can be found in the IANA "JSON Web Signature and Encryption Algorithms" registry established by <xref target="RFC7518"/>; 
            the initial contents of this registry are the values
            defined in Section 3.1 of <xref target="RFC7518"/>.  A digital signature algorithm, such as "ES512", is RECOMMENDED to enable protecting the private key and distributing the public key to validate the Authentication Token signature.</li>
            <li>"typ": The "typ" (Type) Header Parameter, defined in Section 4.1.9 of <xref target="RFC7515"/>, identifies the media type of the complete JWS that uses the EPP Authentication Token specific value "eat+jws", 
            which is registered in <xref target="eat-media-type"/>.</li>
            <li>"kid": The "kid" (KEY ID) Header Parameter, defined in Section 4.1.4 of <xref target="RFC7515"/>, identifies the key used to sign the Authentication Token, 
            where the "kid" can be used to locate the certificate containing the public key to verify the Authentication Token signature.  
            The "kid" value contains the globally unique Repository Object IDentifier (ROID), defined in Section 2.8 of <xref target="RFC5730"/>, 
            assigned to the key pair.</li>
          </ul>
          <t keepWithNext="true">Example Authentication Token Header using the "ES512" digital signature algorithm and the "kid" of "EAT_KEY1_SYSTEM-REP":</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
{
   "alg" : "ES512",           
   "typ" : "eat+jws",         
   "kid" : "EAT_KEY1_SYSTEM-REP" 
}
              ]]></artwork>
        </section>
        <section anchor="authentication-token-payload">
          <name>Authentication Token Payload</name>
          <t>The Authentication Token Payload is a JWS Payload that is protected by the JWS Signature and includes a set of JWT Claims, as defined in Section 4 of <xref target="RFC7519"/>.  The following 
          JWT Claims are used in the Authentication Token Payload:</t>
          <ul spacing="normal">
            <li>"jti": The "jti" (JWT ID) Claim, defined in Section 4.1.7 of <xref target="RFC7519"/>, identifies the globally unique Repository Object IDentifier (ROID), defined in Section 2.8 of <xref target="RFC5730"/>, for 
          the Authentication Token.  An example is "EAT_12345_SYSTEM-REP".</li>
            <li>"sub": The "sub" (Subject) Claim, defined in Section 4.1.2 of <xref target="RFC7519"/>, identifies the user that is associated with the Authentication Token.  An example is "ClientY".</li>
            <li>"exp": The "exp" (Expiration Time) Claim, defined in Section 4.1.4 of <xref target="RFC7519"/>, identifies the expiration time in epoch time on or after which the Authentication Token MUST NOT be used.  An example is "1775682000".</li>
            <li>"entitlements": The "entitlements" (Entitlements) Claim, defined in Section 4.1.2 of <xref target="RFC7643"/>, identifies the list of entitlements or authorization groups for the user.  The authorization group 
          values are up to server policy and are used by the server to implement the authorization of operations.  Examples include service-level authorization groups, such as read-only access to SERVICE1 with "SERVICE1-RO", read-write access to SERVICE2 with "SERVICE2-RW", 
          read-write access to Top Level Domains (TLDs) "TLD1" and "TLD2" with "TLD1-RW" and "TLD2-RW", respectively.</li>
          </ul>
          <t keepWithNext="true">Example Authentication Token Payload for user "ClientY", with "jti" of "EAT_KEY1_SYSTEM-REP", and with a list of entitlements:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
{
   "jti": "EAT_12345_SYSTEM-REP",         
   "sub": "ClientY",           
   "exp": "1775682000",
   "entitlements": [
      "SERVICE1-RO",
      "SERVICE2-RW",
      "TLD1-RW",
      "TLD2-RW"
   ] 
}
              ]]></artwork>
        </section>
        <section anchor="authentication-token-signature">
          <name>Authentication Token Signature</name>
          <t>The Authentication Token Signature is a JWS Signature, as defined in Section 7.2.1 of <xref target="RFC7519"/>.  A list of defined "alg" values for this use can be found in the IANA "JSON Web Signature and Encryption Algorithms" registry established by <xref target="RFC7518"/>; the initial contents of this registry are the values
    defined in Section 3.1 of <xref target="RFC7518"/>.  A digital signature algorithm, such as "ES512", is RECOMMENDED by this document to enable protecting the private key and distributing the public key to validate the Authentication Token signature.</t>
        </section>
      </section>
      <section anchor="authentication-token-poll-message">
        <name>Authentication Token Poll Message</name>
        <t>The EPP &lt;poll&gt; command and response are defined in section 2.9.2.3 of <xref target="RFC5730"/>. 
            For servers that support an Authentication Token object, the Authentication Token Info Response, as defined in Section 3.1.2, 
            is inserted into the poll queue based on server policy, such as when an Authentication token is revoked by the server.</t>
        <t keepWithNext="true">Example &lt;poll&gt; command:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:<command xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <poll op="req"/>
C:  <clTRID>51364-CLI</clTRID>
C:</command>
C:</epp>
            ]]></artwork>
        <t keepWithNext="true">Example &lt;poll&gt; response:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1301">
S:      <msg lang="en-US">
S:         Command completed successfully; ack to dequeue</msg>
S:    </result>
S:    <msgQ id="200" count="1">
S:      <qDate>2026-04-08T09:00:00.0Z</qDate>
S:     <msg>Revoked authentication token</msg>
S:    </msgQ>
S:    <resData>
S:      <authToken:infData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:authToken>
S:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
S:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
S:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
S:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
S:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
S:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
S:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
S:        </authToken:authToken>        
S:        <authToken:status>revoked</authToken:status>
S:       <authToken:revokedDate>2026-04-08T09:00:00.0Z
S:        </authToken:revokedDate>
S:        <authToken:revokedID>ClientZ</authToken:revokedID>
S:        <authToken:revokedReason>security issue
S:        </authToken:revokedReason>
S:      </authToken:infData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
      </section>
    </section>
    <section anchor="commands" numbered="true" toc="default">
      <name>EPP Command Mapping</name>
      <t>A detailed description of the EPP syntax and semantics can be found
      in the EPP core protocol specification <xref target="RFC5730" format="default"/>.  The command
      mappings described here are specifically for use in provisioning and
      managing Authentication Token information via EPP.</t>
      <section anchor="queries" numbered="true" toc="default">
        <name>EPP Query Commands</name>
        <t>This document provides two commands to retrieve Authentication Token information:</t>
        <t>&lt;check&gt; to determine if an Authentication Token is valid and &lt;info&gt; to retrieve 
        detailed information associated with an Authentication Token object.  This document does not
   define a mapping for the EPP &lt;transfer&gt; command.</t>
        <section anchor="check" numbered="true" toc="default">
          <name>EPP &lt;check&gt; Command</name>
          <t>The EPP &lt;check&gt; command is used to determine if an Authentication Token 
          is valid, where an Authentication Token is properly signed, has not expired, and has not 
          been revoked by either the client or the server.</t>
          <t>In addition to the standard EPP command elements, the &lt;check&gt; command
   		  MUST contain an &lt;authToken:check&gt; element.  This element or its ancestor
   		  element MUST identify the "authToken" namespace.  
   		  The &lt;authToken:check&gt; element contains the following child elements:</t>
          <ul spacing="normal">
            <li>
              <t>One or more &lt;authToken:authToken&gt; elements that contains the Authentication Token, defined in <xref target="authentication-token"/>, 
        for the server to validate.</t>
            </li>
          </ul>
          <t keepWithNext="true">Example &lt;check&gt; command:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <check>
C:      <authToken:check
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:        <authToken:authToken>
C:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
C:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
C:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
C:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
C:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
C:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
C:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
C:        </authToken:authToken>
C:        <authToken:authToken>
C:eyJ0eXAiOiJKV1QiLA0KICabcJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJ
C:leHAiOjEzMDAabc4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp
C:0cnVlfQ.dBjftJeZ4CVP-mB92K27abcuhbUJU1p1r_wW1gFWFOEjXk
C:        </authToken:authToken>
C:        <authToken:authToken>
C:eyJ0eXAiOiJasdABBKJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJABCDMDA4MTkzODAsDQo
C:gImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92KA
C:BCDW1gFWFOEjXk
C:        </authToken:authToken>
C:	  </authToken:check>
C:    </check>
C:    <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
            ]]></artwork>
          <t>When a &lt;check&gt; command has been processed successfully, the EPP &lt;resData&gt; 
          element MUST contain a child &lt;authToken:chkData&gt; element that identifies the 
          "authToken" namespace. The &lt;authToken:chkData&gt; element contains the following child elements:</t>
          <t>one or more &lt;authToken:cd&gt; elements that contain the following child elements:</t>
          <ul spacing="normal">
            <li>An &lt;authToken:authToken&gt; element that contains the Authentication Token, defined in <xref target="authentication-token"/>, and 
            MUST contain a "valid" attribute value that indicates whether the Authentication Token is valid.  
            A value "1" or "true" means that the Authentication Token is valid. A value of "0" or "false" means that the 
            Authentication Token is not valid.  An Authentication Token 
            is valid if its correctly signed by a trusted key, follows the format of the "eat+jws" media type, has not expired, and has 
            not been revoked by the client or the server.</li>
            <li>An OPTIONAL &lt;authToken:reason&gt; when the Authentication Token is not valid, such as "expired token" or "revoked token". 
            This text MUST be represented in the response language previously negotiated with the client; 
            an OPTIONAL "lang" attribute MAY be present to identify the language if the negotiated value is something other than
            the default value of "en" (English).            
            This element MUST be returned when the Authentication Token is not valid.</li>
          </ul>
          <t keepWithNext="true">Example &lt;check&gt; response:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully
S:      </msg>
S:    </result>
S:    <resData>
S:      <authToken:chkData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:cd>
S:          <authToken:authToken valid="true">
S:eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleH
S:AiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlf
S:Q.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
S:          </authToken:authToken>        
S:        </authToken:cd>
S:        <authToken:cd>
S:          <authToken:authToken valid="false">
S:eyJ0eXAiOiJKV1QiLA0KICabcJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJ
S:leHAiOjEzMDAabc4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp
S:0cnVlfQ.dBjftJeZ4CVP-mB92K27abcuhbUJU1p1r_wW1gFWFOEjXk
S:          </authToken:authToken>
S:          <authToken:reason>expired token</authToken:reason>
S:        </authToken:cd>
S:        <authToken:cd>
S:         <authToken:authToken valid="false">
S:eyJ0eXAiOiJasdABBKJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJABCDMDA4MTkzODAsDQo
S:gImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92KA
S:BCDW1gFWFOEjXk
S:          </authToken:authToken>
S:          <authToken:reason>revoked token</authToken:reason>
S:        </authToken:cd>
S:      </authToken:chkData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
          <t>An EPP error response MUST be returned if a &lt;check&gt; command cannot be processed for any reason.</t>
        </section>
        <section anchor="info" numbered="true" toc="default">
          <name>EPP &lt;info&gt; Command</name>
          <t>The EPP &lt;info&gt; command is used to retrieve information associated with the Authentication Token, such as whether it has been revoked with related revocation data elements.
          In addition to the standard EPP command elements, the &lt;info&gt; command MUST contain a &lt;authToken:info&gt; 
          element that identifies the "authToken" namespace. The &lt;authToken:info&gt; element contains the following child elements:</t>
          <ul spacing="normal">
            <li>
              <t>A &lt;authToken:authToken&gt; element that contains the Authentication Token, defined in <xref target="authentication-token"/>, 
        to get information for.</t>
            </li>
          </ul>
          <t keepWithNext="true">Example &lt;info&gt; command:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <info>
C:      <authToken:info
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:        <authToken:authToken>
C:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
C:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
C:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
C:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
C:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
C:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
C:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
C:        </authToken:authToken>
C:	    </authToken:info>
C:    </info>
C:    <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
         ]]></artwork>
          <t>When an &lt;info&gt; command has been processed successfully by the server validating 
         the Authentication Token and retrieving any revocation data, the EPP &lt;resData&gt; 
          element MUST contain a child &lt;authToken:infData&gt; element that identifies the 
          "authToken" namespace. The &lt;authToken:infData&gt; element contains the following child elements:</t>
          <ul spacing="normal">
            <li>A &lt;authToken:authToken&gt; element that contains the Authentication Token passed in the &lt;info&gt; command, defined in <xref target="authentication-token"/>.</li>
            <li>
              <t>A &lt;authToken:status&gt; element that contains the Authentication Token status with the following enumerated values:</t>
              <ul>
                <li>"active": Authentication Token is valid, has not expired, and has not been revoked.</li>
                <li>"expired": Authentication Token is not valid, since it has expired.</li>
                <li>"revoked": Authentication Token is not valid, since it has been revoked.</li>
              </ul>
            </li>
            <li>An OPTIONAL &lt;authToken:crDate&gt; element that contains the date and time of Authentication Token creation.</li>
            <li>An OPTIONAL &lt;authToken:exDate&gt; element that contains the date and time when the Authentication token expires and MUST NOT be used.</li>
            <li>An OPTIONAL &lt;authToken:revokedDate&gt; element that contains the date and time the Authentication Token was revoked. 
            This element MUST be returned when the &lt;authToken:status&gt; element has the value of "revoked".</li>
            <li>An OPTIONAL &lt;authToken:revokedID&gt; element that contains the identifier of the client that revoked the Authentication Token object.
            This element MUST be returned when the &lt;authToken:status&gt; element has the value of "revoked".</li>
            <li>An OPTIONAL &lt;authToken:revokedReason&gt; element that contains a freeform reason for the Authentication Token revocation. This text MUST be represented in the response 
                language previously negotiated with the client; an OPTIONAL "lang" attribute MAY be present to identify the language if the negotiated value is something other 
                than the default value of "en" (English).
                This element MUST be returned when the &lt;authToken:status&gt; element has the value of "revoked".</li>
          </ul>
          <t keepWithNext="true">Example &lt;info&gt; response for an active Authentication Token:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully
S:      </msg>
S:    </result>
S:    <resData>
S:      <authToken:infData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:authToken>
S:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
S:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
S:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
S:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
S:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
S:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
S:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
S:        </authToken:authToken>        
S:        <authToken:status>active</authToken:status>
S:        <authToken:crDate>2026-04-08T09:00:00.0Z</authToken:crDate>
S:        <authToken:exDate>2026-04-08T10:00:00.0Z</authToken:exDate>
S:      </authToken:infData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
          <t keepWithNext="true">Example &lt;info&gt; response for an expired Authentication Token:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully
S:      </msg>
S:    </result>
S:    <resData>
S:      <authToken:infData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:authToken>
S:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
S:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
S:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
S:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
S:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
S:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
S:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
S:        </authToken:authToken>        
S:        <authToken:status>expired</authToken:status>
S:        <authToken:crDate>2026-04-08T06:00:00.0Z</authToken:crDate>
S:        <authToken:exDate>2026-04-08T07:00:00.0Z</authToken:exDate>
S:      </authToken:infData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
          <t keepWithNext="true">Example &lt;info&gt; response for a revoked Authentication Token:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully
S:      </msg>
S:    </result>
S:    <resData>
S:      <authToken:infData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:authToken>
S:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
S:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
S:udFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
S:JPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
S:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
S:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
S:        </authToken:authToken>        
S:        <authToken:status>revoked</authToken:status>
S:        <authToken:crDate>2026-04-08T08:30:00.0Z
S:        </authToken:crDate>
S:        <authToken:revokedDate>2026-04-08T09:00:00.0Z
S:        </authToken:revokedDate>
S:        <authToken:revokedID>ClientZ</authToken:revokedID>
S:        <authToken:revokedReason>security issue
S:        </authToken:revokedReason>
S:      </authToken:infData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
          <t>An EPP error response MUST be returned if a &lt;info&gt; command cannot be processed for any reason.
        A 2306 EPP error response MUST be returned if the Authentication Token signature is invalid and a 2305 EPP error response 
        MUST be returned if the Authentication Token does not conform to the "application/eat+jws" media type.</t>
        </section>
        <section anchor="transferQ" numbered="true" toc="default">
          <name>EPP &lt;transfer&gt; Query Command</name>
          <t>The transfer semantics do not apply to Authentication Token objects.  
          No EPP &lt;transfer&gt; query command is defined in this document.</t>
        </section>
      </section>
      <section anchor="transforms" numbered="true" toc="default">
        <name>EPP Transform Commands</name>
        <t>This document provides two commands to transform Authentication Token object information:</t>
        <t>&lt;create&gt; to create an instance of an Authentication Token object and &lt;delete&gt; to revoke an 
   instance of an Authentication Token object.  
   This document does not define a mapping for the EPP &lt;transfer&gt;, &lt;renew&gt;, and &lt;update&gt; command.</t>
        <section anchor="create" numbered="true" toc="default">
          <name>EPP &lt;create&gt; Command</name>
          <t>The EPP &lt;create&gt; command is used to authenticate a user and create an Authentication Token object.</t>
          <t>In addition to the standard EPP command elements, the &lt;create&gt; command MUST contain 
          a &lt;authToken:create&gt; element that identifies the "authToken" namespace. The &lt;authToken:create&gt; 
          element contains the following child elements:</t>
          <ul spacing="normal">
            <li>
              <t>An OPTIONAL &lt;authToken:scope&gt; element that scopes the authentication to a set of registry systems or domain names, which are typically Top Level Domains (TLDs).  
       This enables the client system to restrict authorization groups contained in the created Authentication Token for the registrar user.  If no &lt;authToken:scope&gt; element is provided, 
       the authorization groups assigned to the registrar user will be set by the server.  
       The &lt;authToken:scope&gt; contains the following 
       child elements:</t>
              <ul>
                <li>OPTIONAL zero or more &lt;authToken:system&gt; elements that contain the names of the registry system to scope the Authentication Token authorization groups.
            The registry system names are up to server policy and are made available by the server out-of-band.</li>
                <li>OPTIONAL zero or more &lt;authToken:domain&gt; elements that contain the authoritative domain names managed by the registry to scope the 
            Authentication Token authorization groups.</li>
              </ul>
            </li>
            <li>
              <t>Authentication credentials that consists of a choice between Multi-Factor Authentication (MFA) credentials, represented by the &lt;authToken:credentials&gt; element, or a bearer token, represented by the &lt;authToken:bearerToken&gt; element, supported by the server.
      The &lt;authToken:bearerToken&gt; element contains a Base64 encoded <xref target="RFC4648"/> value and a required "type" attribute, representing the type of the bearer token.  The &lt;authToken:credentials&gt; element includes the following child elements:</t>
              <ul>
                <li>A &lt;authToken:clID&gt; element that contains the registrar user identifier for the authenticating user.</li>
                <li>A &lt;authToken:pw&gt; element that contains the registrar user password for the authenticating user, which must be at least 6 characters long.</li>
                <li>
                  <t>A &lt;authToken:mfa&gt; element that contains the Multi-Factor Authentication (MFA) value, which represents what the registrar user "has" versus what the user "knows" with the &lt;authToken:clID&gt; and &lt;authToken:pw&gt; elements. 
          The type of the MFA credential is defined with the "type" attribute, with the default value of "totp".  The following are the predefined MFA types:</t>
                  <ul>
                    <li>"totp" is a time-based one-time password (TOTP), defined in <xref target="RFC6238"/>.  "totp" is the default "type" attribute value.</li>
                    <li>"key" is a shared key that is Base64 encoded <xref target="RFC4648"/>.</li>
                    <li>"biometric" is data that is Base64 encoded <xref target="RFC4648"/>, where the biometric data accepted by the server is up to server policy.</li>
                    <li>"device" is a device-level key as represented by a hardware or software token that is Base64 encoded <xref target="RFC4648"/>.</li>
                    <li>"push" is a push to the registrar user's device application.  The user device application needs to be configured in the server.</li>
                    <li>"custom" is a custom MFA type defined by the "custom" attribute.  The supported set of custom MFA types is up to server policy.</li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <t keepWithNext="true">Example &lt;create&gt; command with MFA credential:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <create>
C:      <authToken:create
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:        <authToken:scope>
C:          <authToken:domain>example1</authToken:domain>
C:          <authToken:domain>example2</authToken:domain>
C:        </authToken:scope>
C:        <authToken:credential>
C:          <authToken:clID>ClientY</authToken:clID>
C:          <authToken:pw>foo-BAR2</authToken:pw>
C:          <authToken:mfa type="totp">123456
C:          </authToken:mfa>
C:        </authToken:credential>
C:	  </authToken:create>
C:    </create>
C:    <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
         ]]></artwork>

          <t keepWithNext="true">Example &lt;create&gt; command with Bearer Token:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <create>
C:      <authToken:create
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:        <authToken:scope>
C:          <authToken:domain>example1</authToken:domain>
C:          <authToken:domain>example2</authToken:domain>
C:        </authToken:scope>
C:        <authToken:bearerToken type="example">
C:          eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
C:        </authToken:bearerToken>
C:	  </authToken:create>
C:    </create>
C:    <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
         ]]></artwork>
          <t>When a &lt;create&gt; command has been processed successfully the Authentication Token is created 
          and the EPP &lt;resData&gt; 
          element MUST contain a child &lt;authToken:creData&gt; element that identifies the 
          "authToken" namespace. The &lt;authToken:creData&gt; element has the &lt;authToken:authToken&gt; child element that contains the Authentication Token defined in <xref target="authentication-token"/>:</t>
          <t keepWithNext="true">Example &lt;create&gt; response:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp
S:  xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully
S:      </msg>
S:    </result>
S:    <resData>
S:      <authToken:creData
S:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
S:        <authToken:authToken>
S:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
S:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
S:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
S:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
S:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
S:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
S:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
S:        </authToken:authToken>        
S:      </authToken:creData>
S:    </resData>
S:    <trID>
S:      <clTRID>51364-CLI</clTRID>
S:      <svTRID>54321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>
            ]]></artwork>
          <t>An EPP error response MUST be returned if a &lt;create&gt; command cannot be processed for any reason.</t>
        </section>
        <section anchor="update" numbered="true" toc="default">
          <name>EPP &lt;update&gt; Command</name>
          <t>Update semantics do not apply to Authentication Token objects, so there is no mapping defined for the EPP &lt;update&gt; command.</t>
        </section>
        <section anchor="delete" numbered="true" toc="default">
          <name>EPP &lt;delete&gt; Command</name>
          <t>The EPP &lt;delete&gt; command is used to revoke an Authentication Token object.</t>
          <t>In addition to the standard EPP command elements, the &lt;delete&gt; command MUST contain a &lt;authToken:delete&gt; 
          element that identifies the "authToken" namespace. The &lt;authToken:delete&gt; element contains the following child elements:</t>
          <ul spacing="normal">
            <li>
              <t>A &lt;authToken:authToken&gt; element that contains the Authentication Token, defined in <xref target="authentication-token"/>, 
        to revoke.</t>
              <t>An OPTIONAL &lt;authToken:revokedReason&gt; element that contains freeform revocation reason for the Authentication Token.
        This text MUST be represented in the response language previously negotiated with the client; 
        an OPTIONAL "lang" attribute MAY be present to identify the language if the negotiated value is something other 
        than the default value of "en" (English).</t>
            </li>
          </ul>
          <t keepWithNext="true">Example &lt;delete&gt; command:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <delete>
C:      <authToken:delete
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:       <authToken:authToken>
C:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
C:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
C:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
C:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
C:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
C:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
C:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
C:        </authToken:authToken>        
C:	    </authToken:delete>
C:    </delete>
C:   <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
         ]]></artwork>
          <t keepWithNext="true">Example &lt;delete&gt; command with a reason:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <delete>
C:      <authToken:delete
C:        xmlns:authToken="urn:ietf:params:xml:ns:epp:authToken-0.1">
C:       <authToken:authToken>
C:eyJhbGciOiJFUzUxMiIsInR5cCI6ImVhdCtqd3MiLCJraWQiOiJFQVRfS0VZMV9TWVN
C:URU0tUkVQIn0.eyJqdGkiOiJFQVRfMTIzNDVfU1lTVEVNLVJFUCIsInN1YiI6IkNsaW
C:VudFkiLCJleHAiOiIxNzc1NjgyMDAwIiwiZW50aXRsZW1lbnRzIjpbIlNFUlZJQ0UxL
C:VJPIiwiU0VSVklDRTItUlciLCJUTEQxLVJXIiwiVExEMi1SVyJdfQ.ADJWkWMnZUFLl
C:l2Jzxbw00919aC_qm_9UgeBKCY6MSAnVZtOmqVlE-Gfyut5dk7iU69VXKRi89RU3L4Y
C:MyVvykFvAJm-aqNpHkYaYUZ_a0aZeN2KcVTVUXzPEtnq7kldvJTpYhB1-JmbFuQ2B6Z
C:5PFZeR5k-ScmDEDdFl9nIFCLd5-mF
C:        </authToken:authToken>        
C:        <authToken:revokedReason>User inactivity
C:        </authToken:revokedReason>
C:	    </authToken:delete>
C:    </delete>
C:    <clTRID>51364-CLI</clTRID>
C:  </command>
C:</epp>
         ]]></artwork>
          <t>When a &lt;delete&gt; command has been processed successfully, the server MUST respond with an EPP response with no  
	      &lt;resData&gt; element.</t>
          <t keepWithNext="true">Example &lt;delete&gt; response:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S:  <result code="1000"><msg>
S:  Command completed successfully</msg></result>
S:  <trID>
S:   <clTRID>51364-CLI</clTRID>
S:   <svTRID>SRV-43659</svTRID>
S:  </trID>
S: </response>
S:</epp>

            ]]></artwork>
          <t>An EPP error response MUST be returned if a &lt;delete&gt; command cannot be processed for any reason.</t>
        </section>
        <section anchor="renew" numbered="true" toc="default">
          <name>EPP &lt;renew&gt; Command</name>
          <t>Renewal semantics do not apply to Authentication Token objects, so there is
          no mapping defined for the EPP &lt;renew&gt; command.</t>
        </section>
        <section anchor="transferT" numbered="true" toc="default">
          <name>EPP &lt;transfer&gt; Command</name>
          <t>Transfer semantics do not apply to Authentication Token objects, so there is
          no mapping defined for the EPP &lt;transfer&gt; command.</t>
        </section>
      </section>
    </section>
    <section anchor="syntax" numbered="true" toc="default">
      <name>Formal Syntax</name>
      <t>An EPP object mapping is specified in XML Schema notation.  The
      formal syntax presented here is a complete schema representation of
      the object mapping suitable for automated validation of EPP XML
      instances.  The BEGIN and END tags are not part of the schema; they
      are used to note the beginning and ending of the schema for URI
      registration purposes.
      </t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
BEGIN
<?xml version="1.0" encoding="UTF-8"?>

<schema targetNamespace="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">

  <annotation>
    <documentation>
      Extensible Provisioning Protocol v1.0
      shared structures schema.
    </documentation>
  </annotation>

<!--
Object authorization information types.
-->
  <complexType name="pwAuthInfoType">
    <simpleContent>
      <extension base="normalizedString">
        <attribute name="roid" type="eppcom:roidType"/>
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="extAuthInfoType">
    <sequence>
      <any namespace="##other"/>
    </sequence>
  </complexType>

<!--
<check> response types.
-->
  <complexType name="reasonType">
    <simpleContent>
      <extension base="eppcom:reasonBaseType">
        <attribute name="lang" type="language"/>
      </extension>
    </simpleContent>
  </complexType>

  <simpleType name="reasonBaseType">
    <restriction base="token">
      <minLength value="1"/>
      <maxLength value="32"/>
    </restriction>
  </simpleType>

<!--
Abstract client and object identifier type.
-->
  <simpleType name="clIDType">
    <restriction base="token">
      <minLength value="3"/>
      <maxLength value="16"/>
    </restriction>
  </simpleType>

<!--
DNS label type.
-->
  <simpleType name="labelType">
    <restriction base="token">
      <minLength value="1"/>
      <maxLength value="255"/>
    </restriction>
  </simpleType>

<!--
Non-empty token type.
-->
  <simpleType name="minTokenType">
    <restriction base="token">
      <minLength value="1"/>
    </restriction>
  </simpleType>

<!--
Repository Object IDentifier type.
-->
  <simpleType name="roidType">
    <restriction base="token">
      <pattern value="(\w|_){1,80}-\w{1,8}"/>
    </restriction>
  </simpleType>

<!--
Transfer status identifiers.
-->
  <simpleType name="trStatusType">
    <restriction base="token">
      <enumeration value="clientApproved"/>
      <enumeration value="clientCancelled"/>
      <enumeration value="clientRejected"/>
      <enumeration value="pending"/>
      <enumeration value="serverApproved"/>
      <enumeration value="serverCancelled"/>
    </restriction>
  </simpleType>

<!--
End of schema.
-->
</schema>
END]]></artwork>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="IANA-XML-Namespace" numbered="true" toc="default">
        <name>XML Namespace</name>
        <t>This document uses URNs to describe XML namespaces and XML schemas
	conforming to a registry mechanism described in <xref target="RFC3688" format="default"/>. The following URI assignment has been made by
	IANA:</t>
        <t>Registration request for the Authentication Token Mapping namespace:</t>
        <dl newline="false" spacing="compact">
          <dt>URI:</dt>
          <dd>urn:ietf:params:xml:ns:epp:authToken-0.1</dd>
          <dt>Registrant Contact:</dt>
          <dd>Registrant Contact: IESG</dd>
          <dt>XML:</dt>
          <dd>None. Namespace URIs do not represent an XML specification.</dd>
        </dl>
        <t>Registration request for the Authentication Token Mapping XML Schema:</t>
        <dl newline="false" spacing="compact">
          <dt>URI:</dt>
          <dd>urn:ietf:params:xml:schema:epp:authToken-0.1</dd>
          <dt>Registrant Contact:</dt>
          <dd>Registrant Contact: IESG</dd>
          <dt>XML:</dt>
          <dd>See the "Formal Syntax" section of this document.</dd>
        </dl>
      </section>
      <section anchor="EPP-Extension-Registry" numbered="true" toc="default">
        <name>EPP Extension Registry</name>
        <t>The EPP extension described in this document has been registered
	by IANA in the "Extensions for the Extensible Provisioning
	Protocol (EPP)" registry described in <xref target="RFC7451" format="default"/>.  The details of the registration
	is as follows:</t>
        <dl newline="false" spacing="compact">
          <dt>Name of Extension:</dt>
          <dd>"Extensible Provisioning Protocol (EPP) Authentication Token Mapping"</dd>
          <dt>Document Status:</dt>
          <dd>Standards Track</dd>
          <dt>Reference:</dt>
          <dd>(insert reference to RFC version of this document)</dd>
          <dt>Registrant Name and Email Address:</dt>
          <dd>IESG, &lt;iesg@ietf.org&gt;</dd>
          <dt>TLDs:</dt>
          <dd>Any</dd>
          <dt>IPR Disclosure:</dt>
          <dd>None</dd>
          <dt>Status:</dt>
          <dd>Active</dd>
          <dt>Notes:</dt>
          <dd>None</dd>
        </dl>
      </section>
      <section anchor="eat-media-type">
        <name>RDAP JSON Media Type Registration</name>
        <t> This specification registers the "application/eat+jws" media type. </t>
        <ul empty="true" spacing="compact">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: eat+jws</t>
          </li>
          <li>
            <t>Required parameters: n/a</t>
          </li>
          <li>
            <t>Encoding considerations: 8bit; values are represented as a JSON Object or as a series of base64url-encoded values each separated from the next by a single period ('.') character.</t>
          </li>
          <li>
            <t>Security considerations: <xref target="security"/> of this document.</t>
          </li>
          <li>
            <t>Interoperability considerations: n/a</t>
          </li>
          <li>
            <t>Published specification: this document</t>
          </li>
          <li>
            <t>Applications that use this media type: Implementations of the Extensible Provisioning Protocol (EPP) and the EPP Authentication Token extension.</t>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: IESG
                  &lt;iesg@ietf.org&gt;</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: none</t>
          </li>
          <li>
            <t>Author/Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional Registration: no</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security" title="Security Considerations">
      <t>The mapping extensions described in this document extends the 
      security services described by <xref
      target="RFC5730">EPP</xref> and protocol layers used by EPP by creating 
      an authentication token that can be passed on top of EPP for registrar users 
      to perform more fine grained authorization by other EPP extensions.</t>
      <t>The security considerations for the server include:</t>
      <ol>
        <li>The granularity of the "entitlements" (Entitlements) Claim in the <xref target="authentication-token">authentication token</xref> SHOULD 
        consider the Principle of Least Privilege (PoLP) that provides registrar users with limited access rights based on 
        the task necessary to perform the needed operations.</li>
        <li>Setting the "exp" (Expiration Time) Claim in the <xref target="authentication-token">authentication token</xref> SHOULD consider 
        the Principle of Least Privilege (PoLP) is defining the Expiration Time as low as possible for the registrar user to perform the 
        needed operations.  The number of "entitlements" (Entitlements) MAY be a factor in defining the length of the "exp" (Expiration Time) Claim.</li>
        <li>The <xref target="authentication-token">authentication token</xref> MAY be created for BOT users and non-BOT or actual human users.  The type 
        of registrar user (BOT or non-BOT) SHOULD be considered in defining the "entitlements" (Entitlements) Claim and "exp" (Expiration Time) Claim.   
        A BOT user can be fully automated in performing operations with the <xref target="authentication-token">authentication token</xref>, so the security risk 
        is higher.</li>
        <li>A revocation policy SHOULD be defined, where if a registrar is compromized, all active <xref target="authentication-token">authentication tokens</xref> 
        for the registrar SHOULD be revoked with a notification to the registrar, as defined in <xref target="authentication-token-poll-message"/>.</li>
        <li>Selection of an "alg" (Algorithm) in the <xref target="authentication-token">authentication token</xref> SHOULD use the latest 
        security best practices.  It's recommended to select an algorithm that includes both a private key and a public key, where the public key 
        can be distributed for validating the <xref target="authentication-token">authentication token</xref> signature by the client and 
        additional server-side components.</li>
      </ol>
      <t>The security considerations for the client include:</t>
      <ol>
        <li>The <xref target="authentication-token">authentication token</xref> MUST be securely stored and transferred over an encrypted channel, 
        such as defined in the <xref target="RFC5734">EPP over TCP Transport</xref>.</li>
        <li>M-of-N authorization can be chosen or required, where M defines the number of registrar users with a valid 
        <xref target="authentication-token">authentication token</xref> of N registrar users needed to authorize an operation.  The 
        client would need to coordinate creating and access to more than one <xref target="authentication-token">authentication token</xref> 
        to perform an operation, so the client needs to consider how many registrar users can generate 
        <xref target="authentication-token">authentication tokens</xref> and be capable of sharing the <xref target="authentication-token">authentication tokens</xref>.  
        The sharing of <xref target="authentication-token">authentication tokens</xref> across many users and operations raises the level of exposure of 
        the <xref target="authentication-token">authentication token</xref> that reduces the security.  The client needs to consider the tradeoffs of 
        M-of-N authorization with the risk of sharing <xref target="authentication-token">authentication tokens</xref> across many registrar users.</li>
        <li>The client MAY have access to the <xref target="authentication-token">authentication token</xref> public key to pre-verify it prior to 
        using it.  An additional option is to use the <xref target="check">check command</xref> to have the server perform the validation.  All 
        known invalid <xref target="authentication-token">authentication tokens</xref> SHOULD be removed by the client storage.</li>
      </ol>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="W3C.REC-xml-20040204" target="http://www.w3.org/TR/2004/REC-xml-20040204">
          <front>
            <title>"Extensible Markup Language (XML) 1.0 (Third Edition)", World Wide Web Consortium FirstEdition REC-xml-20040204</title>
            <author initials="T" surname="Bray">
              <organization/>
            </author>
            <author initials="J" surname="Paoli">
              <organization/>
            </author>
            <author initials="C" surname="Sperberg-McQueen">
              <organization/>
            </author>
            <author initials="E" surname="Maler">
              <organization/>
            </author>
            <author initials="F" surname="Yergeau">
              <organization/>
            </author>
            <date month="February" year="2004"/>
          </front>
        </reference>
        <reference anchor="W3C.REC-xmlschema-1-20041028" target="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028">
          <front>
            <title>"XML Schema Part 1: Structures Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-1-20041028</title>
            <author initials="H" surname="Thompson">
              <organization/>
            </author>
            <author initials="D" surname="Beech">
              <organization/>
            </author>
            <author initials="M" surname="Maloney">
              <organization/>
            </author>
            <author initials="N" surname="Mendelsohn">
              <organization/>
            </author>
            <date month="October" year="2004"/>
          </front>
        </reference>
        <reference anchor="W3C.REC-xmlschema-2-20041028" target="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028">
          <front>
            <title>"XML Schema Part 2: Datatypes Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-2-20041028</title>
            <author initials="P" surname="Biron">
              <organization/>
            </author>
            <author initials="A" surname="Malhotra">
              <organization/>
            </author>
            <date month="October" year="2004"/>
          </front>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <xi:include href="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
          <xi:include href="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        </referencegroup>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5730.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5734.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6238.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7518.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7643.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8499.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7451.xml"/>
      </references>
    </references>
  </back>
</rfc>
