Fediverse ID (Fediverse)
+
+ The final say for what is and is not a valid
+ Because, from a technical point-of-view, a
+ Also, there currently is no canonical syntax for a
+ But, having said that, we can infer a minimum syntax for what should be considered a valid
acct URI
+
+ Part of the process of resolving a
+ Here is an example of transforming a
+ + at sign + ↓ + @joeblow@example.com ← Fediverse ID + + acct:joeblow@example.com ← acct URI + ↑ + no at sign + ++
+ A client would then make a request to: +
++https://example.com/.well-known/host-meta ++
+ To discover what the (template) URL for
+https://example.com/.well-known/webfinger?resource={uri} ++
+ Then make a request to: +
++https://example.com/.well-known/webfinger?resource=acct:joeblow@example.com ++
Fediverse ID Syntax
+
+ Inferring from IETF RFC-7565 (The 'acct' URI Scheme) and referenced IEFC RFCs, the syntax of a
+fediverseID = "@" actor "@" host ++
+ Where “actor” is defined as: +
++actor = unreserved / sub-delims 0*( unreserved / pct-encoded / sub-delims ) + +unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + +sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" + +pct-encoded = "%" HEXDIG HEXDIG + +ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + +DIGIT = %x30-39 ; 0-9 + +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" ++
+ (Again note that an implementation could support more characters for “actor” than what is given by this definition.) +
++ And “host” is defined as +
++host = IP-literal / IPv4address / reg-name + +IP-literal = "[" ( IPv6address / IPvFuture ) "]" + +IPv6address = 6( h16 ":" ) ls32 + / "::" 5( h16 ":" ) ls32 + / [ h16 ] "::" 4( h16 ":" ) ls32 + / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + / [ *4( h16 ":" ) h16 ] "::" ls32 + / [ *5( h16 ":" ) h16 ] "::" h16 + / [ *6( h16 ":" ) h16 ] "::" + +h16 = 1*4HEXDIG + +ls32 = ( h16 ":" h16 ) / IPv4address + +IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) + +IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + +dec-octet = DIGIT ; 0-9 + / %x31-39 DIGIT ; 10-99 + / "1" 2DIGIT ; 100-199 + / "2" %x30-34 DIGIT ; 200-249 + / "25" %x30-35 ; 250-255 + +reg-name = *( unreserved / pct-encoded / sub-delims ) ++