Simple Web Discovery (SWD)Microsoftmbj@microsoft.comhttp://self-issued.info/Microsoftyarong@microsoft.com
Security
RFCRequest for CommentsI-DInternet-DraftDiscoveryFinger
Simple Web Discovery (SWD) defines an HTTPS GET based mechanism to discover the location of a given type of service for a given principal
starting only with a domain name.
Simple Web Discovery (SWD) defines an HTTPS GET based mechanism to discover the location of a given type of service for a given principal
starting only with a domain name. SWD requests use
query parameters
to specify a URI for the principal and another URI
for the type of service being sought. If the request is successful then the response, by default, is a
JavaScript Object Notation (JSON)
object containing an array of URIs that point to where the
principal has instances of services of the requested type.
For example, let us say that a requester wants to discover where Joe keeps his calendar. The requester could take Joe's e-mail address,
joe@example.com, and use its domain to create an HTTPS GET request of the following form
(with long lines broken for display purposes only):Note: The request-URI is left unencoded in the above example
for the sake of readability. The query parameters above would
actually be encoded as
?principal=joe%40example.com&service=urn%3Aexample%3Aservice%3Acalendar.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
and "OPTIONAL" in this document are to be interpreted as
described in
Key words for use in RFCs to Indicate Requirement Levels .
Domains that support SWD requests SHOULD make an SWD server available for their
domain at the path /.well-known/simple-web-discovery.
The syntax and semantics of /.well-known are defined in RFC 5785.
/.well-known/simple-web-discovery
MUST point to an SWD server compliant with this specification.
SWD servers MUST support receiving SWD requests via TLS 1.2 and MAY support
other transport layer security mechanisms of equivalent security. SWD servers MUST reject SWD requests sent over plain HTTP or any other
transport that does not provide both privacy and validation of the server's identity.
An SWD server is queried using an HTTPS GET request with the
previously specified path along with a query segment
containing a form encoded using the
application/x-www-form-urlencoded encoding algorithm
as defined in HTML 4.01. The form
MUST contain two name/value pairs that MUST appear exactly
once, principal and service. Both name/value pairs MUST have
values that are set to URIs .
If any of the previous
requirements are not met in an SWD request, then the request
MUST be rejected with a 400 Bad Request.
The SWD request form MAY contain additional name/value pairs but if those name/value pairs are not recognized by the SWD server then the SWD
server MUST ignore them for processing purposes.
The principal query component is a
URI that identifies an entity. The service query component is a URI that
identifies a service type. The semantics of the SWD query is
"Please return the location(s) of instances of the specified
service type associated with the specified principal". The
definition of URIs used to identify principals and services
are outside the scope of this specification.
SWD servers MAY also be located on ports other than 443
(the default HTTPS port), provided they use TLS on those ports.
The means by which an SWD client would know to use any alternative
ports are out of scope for this specification.
It may be difficult or impossible for some domains wanting to support
SWD requests to make an SWD server available for their domain at the path
/.well-known/simple-web-discovery.
For instance, in the case of hosted domains, no web server may be
running on the domain host at all.
For that reason, SWD servers for a domain MAY be located on a specific
subdomain of that domain: simple-web-discovery.
For example, the SWD server for the domain
example.com MAY be located at the URI
https://simple-web-discovery.example.com/.well-known/simple-web-discovery.
SWD clients MUST first attempt to make an SWD request to the domain's
/.well-known/simple-web-discovery endpoint,
and then if that fails, they MUST then attempt to make the request to
the SWD endpoint at the simple-web-discovery
subdomain for the domain.
A 200
OK response to an SWD request that contains the information
requested MUST return content of type application/json
. The JSON
response MUST contain a JSON object that contains a member
pair whose name is the string locations and whose value is an array of
strings that are each a URI pointing to a location where the
desired service type belonging to the specified principal can
be found. There are no semantics associated with the order in
which the URIs are listed in the array.The JSON object MAY contain other members but a receiver of the object MAY ignore any member pairs whose name it does not recognize.
An SWD server MAY respond to a request with a 401
Unauthorized Response, as described in
RFC 2616, Section 10. Per the RFC,
the request MAY be repeated with a suitable Authorization
header field. Authorization information may be communicated
in this manner, including a JSON Web Token .
An SWD server MAY return other HTTP 1.1 responses, including
404 Not Found, 400 Bad Request, and 403 Forbidden. SWD
implementations MUST correctly handle these responses.
This specification registers a well-known URI suffix value
relative to "/.well-known/" in the IANA Well-Known URI registry
defined in RFC 5785:
simple-web-discoveryIETF[[ this document ]]
SWD responses can contain confidential information. Therefore
a, general approach is used to require TLS in all cases. But
TLS can only provide for privacy and server validation, it
cannot validate that the requester is authorized to see the
results of a query. The exact mechanism used to determine if
the requester is authorized to see the result of the query is
outside the scope of this specification.
Because SWD responses can contain confidential information,
the requestor may need authorization to receive them.
Standard HTTP authorization mechanisms MAY be employed to
request authorized access, including the use of an HTTP
Authorization header field in requests, which in turn, may
contain a JSON Web Token , among
other authorization data formats.
When the SWD server for a domain is located at the
simple-web-discovery subdomain,
a TLS certificate will need to be present for that subdomain.
JSON Web Token (JWT)Microsoftmbj@microsoft.comhttp://self-issued.info/Ping Identityve7jtb@ve7jtb.comNomura Research Instituten-sakimura@nri.co.jp
[[ to be removed by the RFC editor before publication as an RFC ]]
-04
Specified that the SWD server for a domain may be located at the
simple-web-discovery subdomain of the
domain and that SWD clients must first try the endpoint at the
domain and then the endpoint at the subdomain.
Removed the SWD_service_redirect response,
since redirection can be accomplished by pointing the
simple-web-discovery subdomain to a
different location than the domain's host.
Removed mailto: from examples
in favor of bare e-mail address syntax.
Specified that SWD servers may also be run on ports other than 443,
provided they use TLS on those ports.
-03
Changed "requests use the x-www-form-urlencoded format"
to "requests use query parameters" and changed
"an x-www-form-urlencoded form" to "a form encoded using the
application/x-www-form-urlencoded encoding algorithm",
both at the suggestion of Julian Reschke.
Updated examples to use "urn:example:" URNs rather than
"urn:example.org:" URNs, also at Julian's suggestion.
Applied applicable editorial improvements from JOSE specs to SWD.
Updated references to related specifications.
-02
Update examples to use example.{com,net,org} domain names.
Provide encoded representation of the request-URI query
parameters for the first example request.
Changed "200 O.K." to "200 OK".
Respect line length restrictions in examples.
No normative changes.
-01
Refresh draft before expiration of -00.
No normative changes.
-00
Initial version.