When we discussed this on the last call, we gained consensus
around wording as follows (emphasis added — hopefully the
formatting will make it through):
"Note: When a client attempts access to a
presumptively protected resource without an access token, the
resource server needs to ascertain the authorization server and
resource set identifier associated with that resource without any context to guide it. In
practice, this likely means that the URI reference
used by the client needs to be unique per resource set.”
In the previous week’s discussion, I’d had a
high-level suggestion for a strategy for providing RO context,
which we discussed briefly and concluded didn’t satisfy the goal
to let existing APIs stay as they are, but thinking about it
again, I’m not sure why that is. Let me run through it in
detail.
If the RS has an API that is completely generic per
RO, such as a singular endpoint that normally depends entirely
on an OAuth token to convey the user context, it would similarly
register that singular resource set over and over for each of
its many users (each using a different PAT) at an AS, getting a
unique resource set ID for each in turn.
It does indeed have to be prepared to associate some
attribute with a resource set that can later be matched up with
the PAT, and then what remains is for a client to provide that
attribute somehow when attempting access with no token.
Depending on the nature of the API, the context could be in a
query parameter, or something in the request body. So “without any context to guide it” in our wording
isn’t strictly true.
The approach I mentioned on the call was what
appeared in our wireframes as an “authorization code” that the
AS would send in an email notification to the RqP, which the
client would use in attempting access. That probably wasn’t
quite the right way of envisioning the UX, but I think Justin
was saying that this requires propagating changed URI structure
all the way through. I don’t believe this is needed.
Here are several ways to complete the
PAT-to-client-context chain for a resource set given our same
example, using the “uri” location property of the resource set
description, which is optional and the only part of a resource
set description that isn’t entirely abstract:
- If the RS registered the endpoint with some kind
of query parameter on it identifying the RO, discoverability
would be possible, at (what I believe is) the small cost of
inventing a “new URL” just for the purpose of user
discoverability but not real URI namespace management.
Thinking about Twitter’s API, it would be possible to look
up “Alice in Twitter”, “Bob in Twitter”, etc. in the
directory and attempt access to their protected Twitter
endpoints without inventing new API structure.
- If the RS and AS had the opportunity to extend
the resource set description JSON structure for extra
discoverability features, the RS could add a property for RO
identity, enabling an out-of-band means for the requesting
side to discover and convey RO identity in, say, a request
body.
- If the RS registered only the generic endpoint,
indeed discoverability wouldn’t be possible without a
totally out-of-band RO hint provided somehow.
If this thinking is correct, I think it would be a
good idea to revise our wording because we were trying to signal
something about the nature of the RS API, but backed off of it
and — while making a potentially true statement
about the client API call — overstated the case by getting into
implementation detail (“the URI reference used by
the client"). I suggest making the following revision:
"Note: When a client attempts access to a
presumptively protected resource without an access token, the
resource server needs to ascertain the authorization server and
resource set identifier associated with that resource. If the interface presented by the resource server is
not resource owner-specific, the client needs to supply
sufficient additional context as part of the resource
request. See the [UMA-Impl] for advice on ways to accomplish
this.”
…and then, obviously, adding something like the
analysis above to the UIG. (Note that I call it “interface” and
not “API” because we do that elsewhere in the spec; we don’t
presume it has an API in the classic sense.)
Thoughts?
Eve Maler | cell +1 425.345.6756 | Skype: xmlgrrl | Twitter:
@xmlgrrl | Calendar:
xmlgrrl@gmail.com
_______________________________________________
WG-UMA mailing list
WG-UMA@kantarainitiative.org
http://kantarainitiative.org/mailman/listinfo/wg-uma