A middle ground,  that perhaps no one will like is registering application 
specific claims in the JWT registry,  but pretending them with a app namespace. 

Eg
Int:active

That prevents people from stepping on each other with short names,  and gives a 
central place to look them up,  without requiring all all alls to understand 
all claims. 

John B. 

Sent from my iPhone

> On Mar 5, 2015, at 1:25 PM, Justin Richer <jric...@mit.edu> wrote:
> 
> I'm OK with a separate registry, my only question is whether or not there's a 
> way to correlate and coordinate the values of the two registries. The concern 
> with importing the JWT claims directly into introspection's response was that 
> we'd potentially be stepping on an existing namespace. In practice, I don't 
> think that's a concern, but I can see the argument. If we establish an 
> introspection response registry, how do we continue to deconflict with the 
> JWT registry?
> 
>  -- Justin
> 
>> On 3/5/2015 2:36 AM, Mike Jones wrote:
>> It sounds to me like you're making a good argument for this spec to have its 
>> own registry.  Registries are easy to establish and use.
>> From: Justin Richer
>> Sent: ‎3/‎4/‎2015 6:43 PM
>> To: Mike Jones; Hannes Tschofenig
>> Cc: <oauth@ietf.org>
>> Subject: Re: [OAUTH-WG] Alignment of JWT Claims and Token Introspection 
>> "Claims"
>> 
>> I'm actually fine with keeping the introspection-specific elements out of 
>> the registry (see my note on "active" and how it doesn't fit in JWT below), 
>> but I do not want to give up the short names. The short names are already in 
>> production, especially "active", which is well understood and used in 
>> practice today, and has been for years[1]. Changing this would fundamentally 
>> break all existing implementations for no good reason. I'm slightly more OK 
>> with changing "user_id" to "username", since that's not as widely deployed 
>> to my knowledge (other implementers, please pipe up if I'm mistaken), and 
>> I'm well familiar with "preffered_username" in OIDC because I'm the one that 
>> put it in there [2]. :) While I prefer to leave it be at this stage, I think 
>> this is a less destructive change than "active", "scope", or "client_id" 
>> would be. 
>> 
>> For background to my stance regarding the registry: several revisions (and 
>> years) ago, the introspection draft re-defined several fields that 
>> overlapped with JWT and we were asked to correlate the two. Originally, we 
>> simply had a pointer to re-use the JWT claims as defined, and stacked our 
>> own claims on top. Later, we were asked to outright merge them, which is 
>> what we have right now. If the WG wants to back off that last change to the 
>> middle state -- where we re-use the JWT registry but don't write to it -- 
>> I'm very happy with that result and can work that (back) into the next draft.
>> 
>> Though it does point out something strange about the standards process that 
>> we're running into here: JWT needed a place to register bits of metadata 
>> about a token, so it created one. This became the "JWT registry", and now 
>> it's got hangings of being "JWT-specific". When introspection came along 
>> with a need to talk about much the same kind of information, it makes sense 
>> to re-use the existing items but also that there would be things that are 
>> introspection-specific. 
>> 
>>  -- Justin
>> 
>> [1] https://tools.ietf.org/html/draft-richer-oauth-introspection-03
>> [2] https://bitbucket.org/openid/connect/issue/584/messages-username-claim
>> 
>>> On 3/4/2015 6:28 PM, Mike Jones wrote:
>>> I have severe concerns with this approach.  It’s not appropriate to 
>>> register arbitrary JSON object member names as JWT claim names – especially 
>>> when the JSON object member names are not even being used as JWT claim 
>>> names.  Please do not do this, as it would needlessly pollute the JWT claim 
>>> name namespace with registered names that are application specific.
>>>  
>>> Secondarily, I have concerns about these names and suggestions for how to 
>>> address them.
>>>  
>>> “active” – This claim is not presently adequately defined.  And its 
>>> definition will of necessity be specific to the introspection application.  
>>> Therefore, it should not be registered as a general JWT claim name.  A name 
>>> I would be comfortable with for this concept would be 
>>> urn:ietf:params:oauth:introspection:active, since it makes it clear what 
>>> application the name is used with.
>>>  
>>> “user_id” – The concept you’re describing is almost universally called 
>>> “username”.  User ID is typically the numeric account identifier (carried 
>>> in the “sub” claim in a JWT), and so is not the right name for this.  
>>> Compare it to the preferred_username claim in OpenID Connect.  Please 
>>> change this either to “username” or 
>>> urn:ietf:params:oauth:introspection:username.
>>>  
>>> “token_type” – While this is well-defined, the usage is fairly specific to 
>>> this application.  Again, adding the urn:ietf:params:oauth:introspection: 
>>> name prefix would address this issue.
>>>  
>>> If you give up registering these names in the JWT Claims registry, I’m OK 
>>> with you using short names.  But if you want them to live alongside other 
>>> JWT claim names, please include the urn:ietf:params:oauth:introspection: in 
>>> lieu of registration.
>>>  
>>>                                                             Thank you,
>>>                                                             -- Mike
>>>  
>>> From: OAuth [mailto:oauth-boun...@ietf.org] On Behalf Of Justin Richer
>>> Sent: Wednesday, March 04, 2015 1:46 PM
>>> To: Hannes Tschofenig
>>> Cc: <oauth@ietf.org>
>>> Subject: Re: [OAUTH-WG] Alignment of JWT Claims and Token Introspection 
>>> "Claims"
>>>  
>>> Hi Hannes, thanks for the feedback. Responses inline.
>>>  
>>> On Mar 3, 2015, at 5:56 AM, Hannes Tschofenig <hannes.tschofe...@gmx.net> 
>>> wrote:
>>>  
>>> Hi Justin, Hi all,
>>> 
>>> in OAuth we provide two ways for a resource server to make an
>>> authorization decision.
>>> 
>>> 1) The resource server receives a self-contained token that contains all
>>> the necessary information to make a local authorization decision. With
>>> the JWT we have created such a standardized information and data model.
>>> 
>>> 2) With an access request from a client the resource server asks the
>>> authorization server for "help". The authorization server provides
>>> information that help make the authorization decision. This is the token
>>> introspection approach.
>>> 
>>> I believe the two approaches need to be aligned with regard to the
>>> information and the data model. Since both documents already use JSON as
>>> a way to encode information (=data model) and almost have an identical
>>> information model (the data that is being passed around).
>>> 
>>> What needs to be done?
>>> 
>>> * Use the term 'claims' in both documents.
>>> * Use the same registry (i.e., the registry established with the JWT).
>>> * Register the newly defined claims from the token introspection
>>> document in the claims registry.
>>> 
>>>  
>>> We’ve already done this in the latest draft. Or at least, that’s the intent 
>>> of the current text — the registry is referenced and the new claims are 
>>> registered. Can you specifically point to places where this needs to be 
>>> improved upon?
>>> 
>>> 
>>> Then, I have a few comments on the new claims that are proposed:
>>> 
>>> Here is the definition of the 'active' claim:
>>> 
>>>   active
>>>      REQUIRED.  Boolean indicator of whether or not the presented token
>>>      is currently active.  The authorization server determines whether
>>>      and when a given token is in an active state.
>>> 
>>> This claim is not well-defined. You need to explain what "active" means.
>>> It could, for example, mean that the token is not yet expired. Then,
>>> there is of course the question why you are not returning the 'exp'
>>> claim together with the 'nbf' claim.
>>>  
>>> The definition of “active” is really up to the authorization server, and 
>>> I’ve yet to hear from an actual implementor who’s confused by this 
>>> definition. When you’re the one issuing the tokens, you know what an 
>>> “active” token means to you. Still, perhaps we can be even more explicit, 
>>> such as:
>>>  
>>>  
>>> active
>>>   REQUIRED. Boolean indicator of whether or not the presented token is 
>>> currently active. The specifics of a token’s active state will vary 
>>> depending on the implementation of the authorization server, but generally 
>>> this will indicate that a given token has been issued by this authorization 
>>> server, has not been revoked by the resource owner, and is within its given 
>>> time window of validity (e.g. not expired). 
>>>  
>>> Also, this is one of the places where the overlap between JWT and 
>>> introspection claims don’t make sense. It doesn’t make any sense for a JWT 
>>> to carry an “active” claim at all. Why would you have a JWT claim to be 
>>> anything but active? We should register it with the JWT registry to avoid 
>>> name collisions, but there’s nothing in the JWT registry that says “don’t 
>>> use this inside of a JWT”. Do you have any advice on how to address this?
>>> 
>>> 
>>> 
>>> client_id: What is the resource server going to do with the client_id?
>>> What authorization decision could it make?
>>>  
>>> Whatever it wants to. If an RS can figure out something from the client_id, 
>>> why not let it? The client_id is a piece of information about the context 
>>> of the issuance of the token, and a common enough OAuth value for decision 
>>> making. 
>>> 
>>> 
>>> I have a couple of reactions when I read the 'user_id' claim:
>>>  - I believe the inclusion of a user id field in the                     
>>> response could
>>> lead to further confusion regarding OAuth access token usage for
>>> authentication.
>>>  
>>> This isn’t any different from having a userinfo-endpoint equivalent (like 
>>> social graph or twitter API) and it’s got the same trouble. 
>>> 
>>> 
>>> 
>>>  - Since you define it as a human readable identifier I am wondering
>>> whether you want to say something about the usage. Here it seems that it
>>> might be used for displaying something on a webpage rather than making
>>> an authorization decision but I might well be wrong.
>>>  
>>> We added in “user_id” to our implementation due to developer demand — they 
>>> wanted a username associated with the return value, but to leave the “sub” 
>>> value the same as that defined by OpenID Connect. Note that this is in an 
>>> environment where the username is a known quantity, and they’re not trying 
>>> to do cross-domain authentication. They just want to know whose token this 
>>> was so they can figure out whose data to return. It’s not used for display, 
>>> but I tried to make the definition in contrast to the machine-facing “sub” 
>>> value.
>>> 
>>> 
>>> 
>>>  - I am missing a discussion about the privacy implications of it.
>>> While there is a privacy consideration section I am wondering what
>>> controls the release of this sensitive information from the
>>> authorization server to the resource server. While in some cases the two
>>> parties might belong to the same organization but in other cases that
>>> may not necessarily be true.
>>>  
>>> You’re correct, this is currently missing and I’ll add that in.
>>> 
>>> 
>>> 
>>>  - In terms of the information exchanged about the user I am curious
>>> about the usefulness of including other information as well, such as the
>>> info that is included in an id token (see
>>> http://openid.net/specs/openid-connect-core-1_0.html#IDToken). If this
>>> has nothing to do with the ID token concept and the information carried
>>> within it then I would add that remark.
>>>  
>>>  
>>> You could introspect an ID token if you wanted to, but it’s usually easier 
>>> to just parse it yourself because it’s self-contained. The ID Token also 
>>> extends JWT, so there’s nothing stopping you from returning those claims as 
>>> well. However, note that the audience of the ID token is the OAuth *client* 
>>> whereas the targeted user of the                     introspection endpoint 
>>> is the *protected resource*. The PR isn’t going to see the ID Token most of 
>>> the time, and the client’s not going to need to (or be able to) introspect 
>>> its tokens most of the time, so in practice there’s not really any overlap.
>>>  
>>>  — Justin
>>> 
>>> 
>>> 
>>> Ciao
>>> Hannes
>>> 
>>> _______________________________________________
>>> OAuth mailing list
>>> OAuth@ietf.org
>>> https://www.ietf.org/mailman/listinfo/oauth
> 
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to