Internet DRAFT - draft-snell-web-index
draft-snell-web-index
Network Working Group J. Snell
Internet-Draft July 8, 2012
Intended status: Informational
Expires: January 9, 2013
The .well-known/index Mechanism
draft-snell-web-index-00
Abstract
This memo describes an alternative approach to the Web Resource
discovery mechanisms described within the
draft-jones-simple-web-discovery and draft-jones-appsawg-webfinger
Internet Drafts. It is the intention of this document to provide an
alternative point of view intended to add to the overall discussion
and evolution of a functional, usable, simple discovery mechanism.
Status of this Memo
This Internet-Draft is submitted to IETF in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 9, 2013.
Copyright Notice
Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
Snell Expires January 9, 2013 [Page 1]
Internet-Draft application/merge-patch July 2012
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Motivating Examples . . . . . . . . . . . . . . . . . . . . . 3
3. The WebFinger Approach . . . . . . . . . . . . . . . . . . . . 4
4. Issues with the WebFinger Approach . . . . . . . . . . . . . . 7
5. The Simple Web Discovery Approach . . . . . . . . . . . . . . 8
6. Issues with the Simple Web Discovery Approach . . . . . . . . 8
7. The /.well-known/index Approach . . . . . . . . . . . . . . . 10
8. Recommended Actions . . . . . . . . . . . . . . . . . . . . . 11
9. Security Considerations . . . . . . . . . . . . . . . . . . . 12
10. Normative References . . . . . . . . . . . . . . . . . . . . . 12
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 12
Snell Expires January 9, 2013 [Page 2]
Internet-Draft application/merge-patch July 2012
1. Introduction
There are currently two Internet Drafts currently on the table for
discussion within the Applications Area Working Group (appsawg) that
deal with the basic discovery of information relating to Web hosted
resources. These are:
o The Simple Web Discovery (SWD) mechanism described in
[I-D.jones-simple-web-discovery], and
o The WebFinger Protocol (WF) described in
[I-D.jones-appsawg-webfinger].
While both present fairly reasonable solutions to the general problem
of resource discovery, I believe that there are a number of ways in
which both models can be improved upon and brought together into a
single simple and flexible discovery mechanism. It is the intent of
this memo to describe that alternative approach and contrast it
against both the Simple Web Discovery and WebFinger approaches.
In this document, the key words "MUST", "MUST NOT", "REQUIRED",
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
and "OPTIONAL" are to be interpreted as described in [RFC2119].
2. Motivating Examples
Prior to examining the technical details of the various discovery
mechanisms being considered, it is important to lay out the
fundamental problem for which these specifications are seeking to
provide a solution. For this purpose, consider the following
scenario:
Assume we have a user, "Joe" who just purchased a new mobile
computing device -- a tablet, for instance. After excitedly opening
the box and powering on the device, he is presented with a welcome
screen informing him that the device is capable of accessing and
utilizing a variety of online services that Joe may have access to.
All Joe needs to do is provide the device with one or more of the
personal account identifiers that represent the various online
services he utilizes. Examples may include hosted email and calendar
services, social networking sites, cloud storage providers, document
editing and management services, news and entertainment providers,
etc. In order to keep the "unboxing experience" for Joe and his new
tablet as simple and enjoyable as possible, it is ideal that the
tablet software perform as much of the initial discovery and
configuration of services as possible with only a minimal amount of
input and action required of Joe.
To accomplish this automatic configuration, Joe is asked to provide
Snell Expires January 9, 2013 [Page 3]
Internet-Draft application/merge-patch July 2012
one or more account identifiers, each in a form similar to that of an
email address. For example,
"joe.smith@online-service-provider.example.org". The device
configuration software will take this identifier and convert it into
an HTTP request sent to http://online-service-provider.example.org --
the intent of which is to discover any information about user
"joe.smith" that the server might be willing to make available,
including the type and location of any services provided to the user.
There are several important considerations to keep in mind when the
device sends this service discovery request to the service provider:
1. In many cases, there are inherent privacy concerns and legal
issues that must be considered by the service provider prior to
disclosing any information about the individuals making use of
their services. As a general rule, service providers SHOULD only
provide information about a user when such disclosure is directly
authorized by the user, or when such disclosure does not
represent a potential breach of the user's privacy.
2. Requests for information about a user SHOULD be limited to the
absolute minimum amount of data necessary to complete the
immediately necessary task. Discovered information SHOULD be
readily cacheable for reasonably long periods of time and SHOULD
NOT impose unnecessary burdens on either the requestor or the
service provider. Complexity needs to be kept to an absolute
minimum.
3. This sort of discovery is definitely not a new problem. There is
a deep well of prior experience we can draw from and learn from
to inform our development of a reasonable solution to this basic
problem.
3. The WebFinger Approach
The WebFinger Protocol [I-D.jones-appsawg-webfinger] follows a multi-
step process to addressing the fundamental problem.
Step one is for the user (Joe) to provide the WebFinger client with
what is known as an "acct" URI -- essentially an email address in the
form "joe.smith@online-service-provider.example.org". Upon receiving
the acct ID, the client application extracts the domain name (online-
service-provider.example.org) and sends an HTTP request asking for
that server's "host-meta" document as defined in [RFC6415].
GET /.well-known/host-meta HTTP/1.1
Host: example.org
The server then responds by returning either an XML-formatted "XRD"
document (as described by
Snell Expires January 9, 2013 [Page 4]
Internet-Draft application/merge-patch July 2012
<http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html>) or JSON-
formatted "ERD" document (as described in [RFC6415]). Within this
document would be a link to a so-called "LRDD" resource that is
capable of providing the WebFinger client with information about the
user "joe.smith".
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/xrd+xml; charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Link rel="lrdd"
type="application/xrd+xml"
template="https://example.org/lrdd/?uri={uri}"/>
</XRD>
At this point, the WebFinger client still does not yet know anything
specific about the user "joe.smith". It must first parse the
returned XML document, locate the "lrdd" link (if it exists at all in
the response), and process the provided URL Template [RFC6570] before
it can prepare a second HTTP request to retrieve the information it
desires about the user.
After doing all that, the WebFinger client can proceed to ask the
server for information about the user.
GET /lrdd/?uri=acct:bob.smith@online-service-provider.example.org
Host: example.org
The response to this document is another XML or JSON document that
must then be parsed and processed by the WebFinger client.
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/xrd+xml; charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Expires>2012-03-13T20:56:11Z</Expires>
<Subject>...</Subject>
<Link rel="http://webfinger.net/rel/avatar"
href="http://profile.example.org/joe.smith/picture.jpg"/>
<Link rel="http://webfinger.net/rel/profile-page"
href="http://profile.example.org/joe.smith/"/>
<Link rel="http://webfinger.net/rel/calendar"
href="http://calendar.example.org/joe.smith"/>
</XRD>
Snell Expires January 9, 2013 [Page 5]
Internet-Draft application/merge-patch July 2012
At this point, the WebFinger Client has had to send two separate HTTP
requests and parse two separate documents in order to learn that
there are only three resources relating to the user in question.
Recognizing the inefficiency inherent in this design, the authors of
the WebFinger specification included a short-cut mechanism that
eliminates one of the HTTP requests.
GET /.well-known/host-meta?resource=\
acct:joe.smith@online-service-provider.example.org HTTP/1.1
Host: example.org
When used in this way, the server SHOULD essentially perform the
second query operation on the WebFinger client's behalf, returning
the second XRD document above in response rather than the domains
generic "host-meta" document.
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/xrd+xml; charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Expires>2012-03-13T20:56:11Z</Expires>
<Subject>...</Subject>
<Link rel="http://webfinger.net/rel/avatar"
href="http://profile.example.org/joe.smith/picture.jpg"/>
<Link rel="http://webfinger.net/rel/profile-page"
href="http://profile.example.org/joe.smith/"/>
<Link rel="http://webfinger.net/rel/calendar"
href="http://calendar.example.org/joe.smith"/>
</XRD>
Another inefficiency inherent in the original WebFinger design is the
fact that a requesting client must parse the returned document in
order to determine which services are available for the identified
user. However, it is often the case that the requesting client knows
in advance exactly which service or services it is interested in
knowing about. Ideally, the protocol would provide a means of
allowing the client to ask specifically for information relating to
just that service or set of services, ignoring all others that it may
not care about.
To that end, more recent versions of the WebFinger protocol have
introduced a second optional "rel" parameter that can be included in
the "host-meta" request to specify the specific services the client
is interested in learning about.
Snell Expires January 9, 2013 [Page 6]
Internet-Draft application/merge-patch July 2012
GET /.well-known/host-meta?resource=\
acct:joe.smith@online-service-provider.example.org&\
rel=avatar+calendar HTTP/1.1
Host: online-service-provider.example.org
The server would then be expected to return an XRD or JRD document
containing only information about the identified resource and
services.
4. Issues with the WebFinger Approach
While the WebFinger Protocol does provide a basically workable
solution to the problem and does have working, deployed
implementations in the wild, there are a number of glaring issues
that, in my opinion, make it less than ideal approach.
First is the dependency on XRD and JRD. The requirement to support
two alternative serializations of the same response data
unnecessarily adds complexity. The WebFinger Protocol should draw a
line in the sand and just pick one
<http://www.mnot.net/blog/2012/04/13/json_or_xml_just_decide>.
Second is the unnecessary two HTTP request process to discover
service information for a user. The Web Finger specification itself
recognizes that the additional indirection caused by the host-meta
and LRDD service lookups is both inefficient and unnecessary given
the fact that it defines a shortcut around both in the form of the
resource and rel query parameters. If the requirement can be
addressed by sending a single HTTP request and processing a single
response document, then why is there even a need to define the more
inefficient two-step mechanism?
Third, the WebFinger protocol defines normative dependencies on no
fewer than ten separate specifications. A WebFinger client needs to
not only be capable of sending HTTP requests; but capable of parsing
XML or JSON; capable of understanding the specific XRD and JRD
vocabularies; capable of processing URL Templates; and capable of
processing XML digital signatures included within an XRD document
(per section 11). This seems entirely too excessive and unnecessary
given the basic requirements of the original problem. There is a
much simpler way of achieving the goal.
Fourth, WebFinger fails to address one fundamental privacy issue:
many organizations have established policies against utilizing
clearly-readable email-like identifiers within HTTP request URIs
(<http://goo.gl/meSUZ>.). Such use presents a potential threat to
the privacy of users of the service.
Snell Expires January 9, 2013 [Page 7]
Internet-Draft application/merge-patch July 2012
5. The Simple Web Discovery Approach
The Simple Web Discovery [I-D.jones-simple-web-discovery]
specification takes an alternative, simpler approach to addressing
the same fundamental problem.
Step one, is for the client application to send a single HTTP request
to the server specifying the identity of the user in question and the
service the client is interested in knowing about.
GET /.well-known/simple-web-discovery\
?principal=mailto:joe.smith@online-service-provider.example.com\
&service=urn:example:service:calendar HTTP/1.1
Host: example.com
The server would respond with a simple JSON document providing the
URL of the requested service.
HTTP/1.1 200 OK
Content-Type: application/json
{
"locations": ["https://calendars.example.org/joe.smith"]
}
If the server wishes, it can choose to redirect the request to a
separate HTTP URL. This is done, not by making use of HTTP's
inherent redirection mechanisms (e.g. a 302 Found response) but by
returning a JSON document containing the URL of the alternative
endpoint.
HTTP/1.1 200 OK
Content-Type: application/json
{
"SWD_service_redirect": {
"location": "https://swd.example.com/swd_server",
"expires": 1300752001
}
}
Upon receiving such a response, the client would need to reissue
their request to the new location.
6. Issues with the Simple Web Discovery Approach
While the Simple Web Discovery (SWD) specification is significant
Snell Expires January 9, 2013 [Page 8]
Internet-Draft application/merge-patch July 2012
less complicated than the WebFinger approach, there are a number of
issues of concern.
First, as was the case with WebFinger, SWD does not address the
fundamental privacy issue caused by the use of email-like identifiers
within the request URI.
Second, SWD allows the client to request information about only one
service at a time. This means that, unlike WebFinger, if a client
wishes to know about multiple available for a given user, multiple
HTTP requests must be sent and that the client must have a reasonable
expectation, in advance, about which services are provided by a given
server.
Third, JSON-responses provided by the SWD server are a crude
imitation of the redirection capabilities that are inherently built
in to the HTTP protocol. For instance, the response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"locations": ["https://calendars.example.org/joe.smith"]
}
Could easily be recast into the form of a 302 Found Redirect:
HTTP/1.1 302 Found
Location: https://calendars.example.org/joe.smith
Doing so would eliminate the need for the client to parse the JSON
payload and would allow the client to take full advantage of the
redirected request support that is naturally built into HTTP.
For example, consider an alternative scenario where the client is
requesting a link to the user's avatar image rather than their
calendar. Using an HTTP redirect rather than a JSON-based document
in the response would allow the client to do simply:
<img src="http://example.org/.well-known/simple-web-discovery\
?principal=mailto:joe.smith@online-service-provider.example.org&\
service=urn:example:service:avatar" />
Likewise, the SWD service redirection response can be converted into
an HTTP redirection response:
HTTP/1.1 302 Found
Location: https://swd.example.com/swd_server
Snell Expires January 9, 2013 [Page 9]
Internet-Draft application/merge-patch July 2012
Expires: ...
While SWD is certainly a step in the right direction compared to
WebFinger, there are a number of obvious ways in which the protocol
can be improved.
7. The /.well-known/index Approach
The "/.well-known/index" is an alternative solution that I propose is
a reasonable and simplified evolution of the Simple Web Discovery
approach that addresses not only the original problem but the
inherent weaknesses within the previously discussed WebFinger and SWD
approaches.
Like WebFinger and SWD, index makes use of the .well-known URL
capability defined by [RFC5785]. However, rather than using query-
string parameters, the index uses hierarchical path segments to
identify the information being requested. Additionally, rather than
transmitting email-like identifiers in plain text within the request
URI, index calls for such identifiers to be hashed.
For instance, given that that SHA-256 digest of the value
"acct:joe.smith@online-service-provider.example.org" is
"53ae56ef33ccb9550869e58820df36c3b1cc9574712556059a3bfc716b4d9255", a
request to retrieve a redirection to the calendar service for user
"joe.smith" would be:
GET /.well-known/index/\
53ae56ef33ccb9550869e58820df36c3b1cc9574712556059a3bfc716b4d9255/\
calendar
Host: online-service-provider.example.org
The response to this request would be an HTTP redirect:
HTTP/1.1 302 Found
Location: https://calendar.example.org/joe.smith
If the client wishes to request information about multiple services,
each can be specified within the request URL using a comma-separated
list. For instance:
GET /.well-known/index/\
53ae56ef33ccb9550869e58820df36c3b1cc9574712556059a3bfc716b4d9255/\
calendar,avatar
Host: online-service-provider.example.org
The response would again be an HTTP redirect using the 300 Multiple
Snell Expires January 9, 2013 [Page 10]
Internet-Draft application/merge-patch July 2012
Choices status code and containing a single Link header for each
requested service:
HTTP/1.1 300 Multiple Choices
Link: <https://calendar.example.org/joe.smith>; rel="calendar",
<https://profile.example.org/joe.smith/avatar.jpg>; rel="avatar"
If the client is not aware ahead of time as to what services are
available for a given user, a GET request can be issued that omits
the service name from the request URI:
GET /.well-known/index/\
53ae56ef33ccb9550869e58820df36c3b1cc9574712556059a3bfc716b4d9255
Host: online-service-provider.example.org
The response would be a 300 Multiple Choices redirect with Link
headers pointing to each available service:
HTTP/1.1 300 Multiple Choices
Link: <./calendar>; rel="calendar",
<./avatar>; rel="avatar",
<./profile>; rel="profile"
With this approach, it remains entirely possible for a server to
serve up additional detail in the form of a document describing the
service (e.g. an XRD), if it so desires, at the target end of the
HTTP redirect.
It also remains possible, through appropriate use of HTTP Caching
mechanisms, for redirect responses to be cached for reasonably long
periods of time.
This approach introduces no extraneous normative dependencies on
multiple external specifications such as XML, JSON, XRD, Host-meta,
URL Templates, etc. At a minimum, a client application needs only to
know to send HTTP requests, process Link headers and generate SHA-256
digests of account identifiers in order to function. Additional
mechanisms, such as OAuth 2.0, can easily be applied as necessary.
8. Recommended Actions
Of the two draft specifications on the table currently, the Simple
Web Discovery specification is by far the better choice. The
WebFinger specification should be tabled for now in favor of an
evolved version of Simple Web Discovery that adopts (either wholly or
in part) the index solution described herein.
Snell Expires January 9, 2013 [Page 11]
Internet-Draft application/merge-patch July 2012
Specifically, at a minimum, the Simple Web Discovery specification
should be updated such that:
1. Account identifiers can be specified in the form of digest values
rather than the literal, plain-text identifiers, and
2. Multiple services can be specified, or
3. No services can be specified in the case the client wishes to
discover all available information about a given identifier, and
4. HTTP-level redirects are used rather that the JSON-based
"redirection" documents.
9. Security Considerations
None.
10. Normative References
[I-D.jones-appsawg-webfinger]
Jones, P., Salgueiro, G., and J. Smarr, "WebFinger",
draft-jones-appsawg-webfinger-06 (work in progress),
June 2012.
[I-D.jones-simple-web-discovery]
Jones, M. and Y. Goland, "Simple Web Discovery (SWD)",
draft-jones-simple-web-discovery-03 (work in progress),
July 2012.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known
Uniform Resource Identifiers (URIs)", RFC 5785,
April 2010.
[RFC6415] Hammer-Lahav, E. and B. Cook, "Web Host Metadata",
RFC 6415, October 2011.
[RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
and D. Orchard, "URI Template", RFC 6570, March 2012.
Author's Address
James M Snell
Email: jasnell@gmail.com
Snell Expires January 9, 2013 [Page 12]