Ballot for draft-ietf-regext-allocation-token
Yes
No Objection
Note: This ballot was opened for revision 09 and is now closed.
I agree with Ben and Alexey (and others) that it would be helpful for the document to be clearer in the introduction about the motivations (what and why) this is being done. Also, thanks to Al Morton for the OpsDir review.
I am looking forward to reading answers to Mirja's questions. I think the Introduction section can be improved in explaining how allocation token is used and why it is needed.
BCP 14 can be referenced in the usual way, it doesn't need a URL reference.
Substantive Comments: - General: As far as I can tell, the document doesn't explain what an Allocation Token _is_. It talks about how it is used and what it contains, but I'm not sure what one represents semantically, or how it gets created, destroyed, etc. I see Section 7 mentions that Allocation Tokens are defined elsewhere; is there something that can be referenced? If not, would it be reasonable to add a high level summary to the introduction? §3.1.1: "Availability of allocation.example and allocation2.example domain names are based on the Allocation Token ’abc123’" I'm confused by this, since the example shows a "mismatch" result for allocation.example. §3.2.1, 2nd paragraph: I'm confused by the idea of a token mismatch for an object that has not yet been created. (Please see my general comment; some discussion of the lifecycle of allocation tokens would be helpful.) Editorial Comments: §1.1, last paragraph: The "REQUIRED" seems like a statement of fact. §3.1.1: "If an object requires an Allocation Token and the Allocation Token does not apply to the object or an object does not require an Allocation Token..." That's hard to parse. Please consider separate cases for "required but does not apply" and "not required".
Thank you for resolving my DISCUSS points. Original COMMENT section preserved below. (section-by-section) Section 1 A client MUST pass an Allocation Token known to the server to be authorized to use one of the supported EPP transform commands. It is up to server policy which EPP transform commands and which objects require the Allocation Token. The language could probably be tightened up for greater clarity about when the MUST applies, and perhaps be consistent about "supported" vs. "require" between sentences. Section 1.1 represents lines returned by a protocol server. Indentation and white space in examples are provided only to illustrate element relationships and are not a REQUIRED feature of this protocol. It would be nice to rephrase this so that "NOT REQUIRED" could be together/majuscule. Maybe, "to illustrate element relationships and implementations are NOT REQUIRED to adhere to such whitespace and formatting"? The XML namespace prefix "allocationToken" is used for the namespace "urn:ietf:params:xml:ns:allocationToken-1.0", but implementations MUST NOT depend on it and instead employ a proper namespace-aware XML parser and serializer to interpret and output the XML documents. Maybe I'm misunderstanding, but isn't this kind-of inviting sloppy implementations that don't check? Sometimes we say things like "this prefix is used in the examples for concision but actual usage is expected to vary between fully scoped and shortened versions". Section 3.1.1 2. If an object requires an Allocation Token and the Allocation Token does not apply to the object or an object does not require an Allocation Token, then the server SHOULD return the availability status as unavailable (e.g., "avail" attribute is "0" or "false"). It's really unclear why these two cases are not distinguished in a machine-readable way (i.e., not the text of the reason). (Also in 3.2.4, etc.) Section 3.1.2 [...] Authorized clients MAY retrieve the Allocation Token (Section 2.1) along with the other object information using the <allocationToken:info> element. [...] The causality here is a bit weird; it seems like the client is requesting to retrieve the token by including <allocationToken:info> in its request so that the server knows to include it in the response (where it is retrieved from an <allocationToken:allocationToken> element). If the query was successful, the server replies with an <allocationToken:allocationToken> element, as described in Section 2.1. Section 2.1 describes the contents of the element, not how the server replies with it. Maybe, "interpreted as described in" would be better? Section 3.1.3 It would probably be good to have some discussion of why the <transfer> query command (as opposed to transform command) does not benefit from having this additional authorization-checking mechanism. Section 3.2.1 The EPP <create> command provides a transform operation that allows a client to create an instance of an object. In addition to the EPP command elements described in an object mapping like [RFC5731], the command MUST contain a child <allocationToken:allocationToken> This MUST is only for the cases when an allocation token is to be used, right? (Similarly in 3.2.4, etc.) element for the client to be authorized to create and allocate the object. If the Allocation Token does not apply to the object, the server MUST return an EPP error result code of 2201. nit: Maybe "supplied Allocation Token"? Section 3.2.2, 3.2.3, 3.2.5 Similarly to for Section 3.1.3, some text on why the additional authorization is not useful would be helpful. Section 4.1 <annotation> <documentation> Extensible Provisioning Protocol v1.0 Allocation Token Extension. </documentation> </annotation> nit: are this many line breaks needed? I also question the minLength of 1 for an allocation token value. Why couldn't it be more like 16 or even 32? I would put this in the DISCUSS section but maybe there are mitgating circumstances I'm unaware of.
Thank you for addressing my DISCUSS
Two quick questions (and I'm really no expert here, so these questions might be stupid): 1) Why should the check return 'unavailable' if the object does not require an Allocation Token but the check is send with an Allocation Token (sec 3.1.1)? Is that obvious to everybody else but me or should that maybe be further explained in the doc? And inline with that, why is it not a MUST to return 'unavailable' if a Token is required but the sent token doesn't match? 2) Why is this mechanism not applied to delete, renew, and update?