Dear working group, It turns out that writing an ABNF for the Core spec pointed out that the syntax of a number of the OAuth protocol elements had not been previously defined. (Thanks, Sean, for having us do this!) I took a stab at specifying appropriate ABNF values for each of the protocol elements, but I would request that the working group actively review the choices in my proposed draft.
For instance, I chose to use the same syntax definitions for username and password and client_id and client_secret as HTTP Basic used for userid and password. Other choices were possible, such as perhaps limiting client_id and possibly username values to use "unreserved" characters, rather than allowing all characters other than ":" (as HTTP Basic did with userid). Please particularly review the syntax definitions for these elements, as I had to make choices that went beyond the current specs to provide unambiguous syntax definitions: client_id client_secret state code access_token username password refresh_token The full proposed ABNF section follows. -- Mike Appendix A. Augmented Backus-Naur Form (ABNF) Syntax This section provides Augmented Backus-Naur Form (ABNF) syntax descriptions for the elements defined in this specification using the notation of [RFC5234]. Elements are presented in the order first defined. Some of the definitions that follow use the "unreserved" and "URI" definitions from [RFC3986], which are: unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] Some of the definitions that follow use the "b64token" syntax below, which matches the "b64token" syntax defined by HTTP/1.1, Part 7 [I-D.ietf-httpbis-p7-auth]: b64token = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" A.1. "client_id" Syntax The "client_id" element is defined in Section 2.3.1: client-id = *<TEXT excluding ":"> (This matches the "userid" definition in the HTTP Basic Authentication Scheme [RFC2617].) A.2. "client_secret" Syntax The "client_secret" element is defined in Section 2.3.1: client-secret = *TEXT (This matches the "password" definition in the HTTP Basic Authentication Scheme [RFC2617].) A.3. "response_type" Syntax The "response_type" element is defined in Section 3.1.1 and Section 8.4: response-type = response-name *( SP response-name ) response-name = 1*response-char response-char = "_" / DIGIT / ALPHA A.4. "scope" Syntax The "scope" element is defined in Section 3.3: scope = scope-token *( SP scope-token ) scope-token = 1*( %x21 / %x23-5B / %x5D-7E ) A.5. "state" Syntax The "state" element is defined in Section 4.1.1, Section 4.1.2, Section 4.1.2.1, Section 4.2.1, Section 4.2.2, and Section 4.2.2.1: state = 1*unreserved A.6. "redirect_uri" Syntax The "redirect_uri" element is defined in Section 4.1.1, Section 4.1.3, and Section 4.2.1: redirect-uri = URI A.7. "error" Syntax The "error" element is defined in Section 4.1.2.1, Section 4.2.2.1, Section 5.2, Section 7.2, and Section 8.5: error = 1*error-char error-char = %x20-21 / %x23-5B / %x5D-7E A.8. "error_description" Syntax The "error_description" element is defined in Section 4.1.2.1, Section 4.2.2.1, Section 5.2, and Section 7.2: error-description = 1*error-char error-char = %x20-21 / %x23-5B / %x5D-7E A.9. "error_uri" Syntax The "error_uri" element is defined in Section 4.1.2.1, Section 4.2.2.1, Section 5.2, and Section 7.2: error-uri = URI A.10. "grant_type" Syntax The "grant_type" element is defined in Section 4.1.3, Section 4.3.2, Section 4.4.1, Section 6, and Section 4.5: grant-type = grant-name / URI grant-name = 1*name-char name-char = "-" / "." / "_" / DIGIT / ALPHA A.11. "code" Syntax The "code" element is defined in Section 4.1.3: code = 1*unreserved A.12. "access_token" Syntax The "access_token" element is defined in Section 4.2.2 and Section 5.1: access-token = b64token A.13. "token_type" Syntax The "token_type" element is defined in Section 4.2.2, Section 5.1, and Section 8.1: token-type = type-name / URI type-name = 1*name-char name-char = "-" / "." / "_" / DIGIT / ALPHA A.14. "expires_in" Syntax The "expires_in" element is defined in Section 4.2.2 and Section 5.1: expires-in = 1*DIGIT A.15. "username" Syntax The "username" element is defined in Section 4.3.2: username = *<TEXT excluding ":"> (This matches the "userid" definition in the HTTP Basic Authentication Scheme [RFC2617].) A.16. "password" Syntax The "password" element is defined in Section 4.3.2: password = *TEXT (This matches the "password" definition in the HTTP Basic Authentication Scheme [RFC2617].) A.17. "refresh_token" Syntax The "refresh_token" element is defined in Section 5.1 and Section 6: refresh-token = b64token A.18. Endpoint Parameter Syntax The syntax for new endpoint parameters is defined in Section 8.2: param-name = 1*name-char name-char = "-" / "." / "_" / DIGIT / ALPHA
_______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth