There are a number of cases that all demand a more parsable scope. 

One of the cases is multi resource scopes. 

Would it not be reasonable to develop another draft that defines a simple json 
structure that allows different uris to be matched with specific scope values?

I also wonder if registration is the place to redefine or further define scope. 

IOW a separate draft can be totally optional. But can be used by multi-resource 
sites to solve oauth2s limited scope capability. 

Phil

On 2013-04-18, at 9:03, Tim Bray <twb...@google.com> wrote:

> I’m unconvinced, Mike.  Obviously you’re right about the looseness of OAuth2 
> scope specification, but this is a very specific semantic of what happens 
> when you register, and I don’t think we’re bound by history here.   If we 
> can’t safely say anything about what the list of scopes means, then I'm with 
> you let's take them out.  But the most obvious intended semantic is (from the 
> client) “I promise to ask only for these” and from the server “These are the 
> only ones I’ll give you tokens for.”  Or does someone have use-cases for an 
> alternative semantic?
> 
> To make this concrete, I propose the following:
> “Space-separated list of scope values (as described in OAuth 2.0 Section 3.3 
> [RFC6749]) that the client is declaring to the server that it will restrict 
> itself to when requesting access tokens, and that the server is declaring to 
> the client that it is registered to use when requesting access tokens.  
> Clients SHOULD assume that servers will refuse to grant access tokens for 
> scopes not in the list provided by the server.”
> 
> 
> 
> 
> 
> On Thu, Apr 18, 2013 at 8:55 AM, Mike Jones <michael.jo...@microsoft.com> 
> wrote:
>> I don’t think it’s possible to define what it means in an interoperable way 
>> because OAuth didn’t specify scopes in an interoperable way.  No, I don’t 
>> like that either, but I think that’s where things are.  That’s why I was 
>> advocating deleting this registration feature entirely.
>> 
>>  
>> 
>> But understanding it might be useful in some contexts, I’m OK keeping it, 
>> provided we be clear that the semantics of “registered to use” are 
>> service-specific.
>> 
>>  
>> 
>>                                                             -- Mike
>> 
>>  
>> 
>> From: Tim Bray [mailto:twb...@google.com] 
>> Sent: Thursday, April 18, 2013 8:36 AM
>> To: Mike Jones
>> Cc: Justin Richer; oauth@ietf.org
>> 
>> 
>> Subject: Re: [OAUTH-WG] Registration: Scope Values
>>  
>> 
>> On the server-to-client side, what does “registered to use” mean?  Does it 
>> mean that the client should assume that any scopes not on the list WILL not 
>> be granted, MAY not be granted.... or what?  Is this already covered 
>> elsewhere? -T
>> 
>>  
>> 
>> On Thu, Apr 18, 2013 at 8:28 AM, Mike Jones <michael.jo...@microsoft.com> 
>> wrote:
>> 
>> Thanks, Justin.  I agree with the need for the generic two-sided language.  
>> I’d still keep this language for scope, because we want to capture the 
>> “declaring” aspect in this case:
>> 
>>  
>> 
>> “Space separated list of scope values (as described in OAuth 2.0 Section 3.3 
>> [RFC6749]) that the client is declaring to the server that it may use when 
>> requesting access tokens and that the server is declaring to the client that 
>> it is registered to use when requesting access tokens.”.
>> 
>>  
>> 
>> You should probably also reinforce that scope values are service-specific 
>> and may not consist only of a static set of string values, and that 
>> therefore, in some cases, an exhaustive list of registered scope values is 
>> not possible.
>> 
>>  
>> 
>>                                                             -- Mike
>> 
>>  
>> 
>> From: Justin Richer [mailto:jric...@mitre.org] 
>> Sent: Monday, April 15, 2013 12:29 PM
>> 
>> 
>> To: Mike Jones
>> Cc: Tim Bray; oauth@ietf.org
>> Subject: Re: [OAUTH-WG] Registration: Scope Values
>> 
>>  
>> 
>> I think that because the "declaration" issue affects all parameters in the 
>> list, not just scope, we should adopt this in a higher level paragraph and 
>> leave it out of the individual parameter descriptions. Thus, something like 
>> this inserted as the second paragraph in section 2:
>> 
>> The client metadata values serve two parallel purposes in the overall OAuth 
>> Dynamic Registration protocol: 
>> 
>>  - the Client requesting its desired values for each parameter to the 
>> Authorization Server in a [register] or [update] request,
>>  - the Authorization Server informing the Client of the current values of 
>> each parameter that the Client has been registered to use through a [client 
>> information response]. 
>> 
>> An Authorization Server MAY override any value that a Client requests during 
>> the registration process (including any omitted values) and replace the 
>> requested value with a default. The normative indications in the following 
>> list apply to the Client's declaration of its desired values. 
>> 
>> The Authorization Server SHOULD provide documentation for any fields that it 
>> requires to be filled in by the client or to have particular values or 
>> formats. Extensions and profiles...
>> 
>> 
>> And then remove the sidedness-language from the scope parameter and any 
>> other parameters where it might have crept in inadvertently. 
>> 
>>  -- Justin
>> 
>> On 04/15/2013 01:29 PM, Mike Jones wrote:
>> 
>> We could fix the one-sided language by changing
>> 
>> “Space separated list of scope values (as described in OAuth 2.0 Section 3.3 
>> [RFC6749]) that the client is declaring that it may use when requesting 
>> access tokens.”
>> 
>> to
>> 
>> “Space separated list of scope values (as described in OAuth 2.0 Section 3.3 
>> [RFC6749]) that the client is declaring to the server that it may use when 
>> requesting access tokens and that the server is declaring to the client that 
>> it is registered to use when requesting access tokens.”.
>> 
>>  
>> 
>> Again, I chose the “registered to use” language carefully – because in the 
>> general case it’s not a restriction on the values that the client can use – 
>> just a statement by the server to the client that it is registered to use 
>> those particular values.  In both cases, the parties are making declarations 
>> to one another.
>> 
>>  
>> 
>> If you adopt that language (or keep the original language), then yes, I’d 
>> consider this closed.
>> 
>>  
>> 
>>                                                             -- Mike
>> 
>>  
>> 
>> From: Justin Richer [mailto:jric...@mitre.org] 
>> Sent: Monday, April 15, 2013 9:57 AM
>> To: Mike Jones
>> Cc: Tim Bray; oauth@ietf.org
>> Subject: Re: [OAUTH-WG] Registration: Scope Values
>> 
>>  
>> 
>> I absolutely do not want to delete this feature, as (having implemented it) 
>> I think it's very useful. This is a very established pattern in manual 
>> registration: I know of many, many OAuth2 servers and clients that are set 
>> up where the client must pre-register a set of scopes. 
>> 
>> I don't like the language of "the client is declaring" because it's too 
>> one-sided. The client might not have declared anything, and it might be the 
>> server that's declaring something to the client. Deleting the "is declaring" 
>> bit removes that unintended restriction of the language while keeping the 
>> original meaning intact. I actually thought that I had fixed that before the 
>> last draft went in but apparently I missed this one.
>> 
>> I will work on clarifying the intent of the whole metadata set in its 
>> introductory paragraph(s) so that it's clear that all of these fields are 
>> used in both of these situations:
>> 
>>  1) The client declaring to the server its desire to use a particular value
>>  2) The server declaring to the client that it has been registered with a 
>> particular value
>> 
>> This should hopefully clear up the issue in the editor's note that I 
>> currently have at the top of that section right now, too.
>> 
>> Mike, since you were the one who originally brought up the issue, and you're 
>> fine with the existing text, can I take this as closed now? Assuming that 
>> you agree with deleting "is declaring" for reasons stated above, I'm fine 
>> with leaving everything else as is and staying quiet on what the server has 
>> to do with the scopes.
>> 
>>  -- Justin
>> 
>> 
>> On 04/15/2013 12:44 PM, Mike Jones wrote:
>> 
>> I think that the existing wording is superior to the proposed changed 
>> wording.  The existing wording is:
>> 
>>  
>> 
>>    scope
>> 
>>       OPTIONAL.  Space separated list of scope values (as described in
>> 
>>       OAuth 2.0 Section 3.3 [RFC6749]) that the client is declaring that
>> 
>>       it may use when requesting access tokens.  If omitted, an
>> 
>>       Authorization Server MAY register a Client with a default set of
>> 
>>       scopes.
>> 
>>  
>> 
>> For instance, the current “client is declaring” wording will always be 
>> correct, whereas as the change to “client can use” wording implies a 
>> restriction on client behavior that is not always applicable.  The “client 
>> is declaring” wording was specific and purposefully chosen, and I think 
>> should be retained.  In particular, we can’t do anything that implies that 
>> only the registered scopes values can be used.  At the OAuth spec level, 
>> this is a hint as to possible future client behavior – not a restriction on 
>> future client behavior.
>> 
>>  
>> 
>> Also, for the reasons that Tim stated, I’m strongly against any “matching” 
>> or “regex” language in the spec pertaining to scopes – as it’s not 
>> actionable.
>> 
>>  
>> 
>> So I’d propose that we leave the existing scope wording in place.  
>> Alternatively, I’d also be fine with deleting this feature entirely, as I 
>> don’t think it’s useful in the general case.
>> 
>>  
>> 
>>                                                             -- Mike
>> 
>>  
>> 
>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf Of 
>> Justin Richer
>> Sent: Monday, April 15, 2013 8:05 AM
>> To: Tim Bray; oauth@ietf.org
>> Subject: Re: [OAUTH-WG] Registration: Scope Values
>> 
>>  
>> 
>> On 04/15/2013 10:52 AM, Tim Bray wrote:
>> 
>> 
>> 
>> I’d use the existing wording; it’s perfectly clear.  Failing that, if 
>> there’s strong demand for registration of structured scopes, bless the use 
>> of regexes, either PCREs or some careful subset.
>> 
>> 
>> Thanks for the feedback -- Of these two choices, I'd rather leave it as-is. 
>> 
>> 
>> 
>> 
>>  
>> 
>> However, I’d subtract the sentence “If omitted, an Authorization Server MAY 
>> register a Client with a default set of  scopes.”  It adds no value; if the 
>> client doesn’t declare scopes,  the client doesn’t declare scopes, that’s 
>> all.  -T
>> 
>> 
>> Remember, all of these fields aren't just for the client *request*, they're 
>> also for the server's *response* to either a POST, PUT, or GET request. (I 
>> didn't realize it, but perhaps the wording as stated right now doesn't make 
>> that clear -- I need to fix that.) The value that it adds is if the client 
>> doesn't ask for any particular scopes, the server can still assign it scopes 
>> and the client can do something smart with that. Dumb clients are allowed to 
>> ignore it if it doesn't mean anything to them. 
>> 
>> This is how our server implementation actually works right now. If the 
>> client doesn't ask for anything specific at registration, the server hands 
>> it a bag of "default" scopes. Same thing happens at auth time -- if the 
>> client doesn't ask for any particular scopes, the server hands it all of its 
>> registered scopes as a default. Granted, on our server, scopes are just 
>> simple strings right now, so they get compared at the auth endpoint with an 
>> exact string-match metric and set-based logic. 
>> 
>>  -- Justin
>> 
>> 
>> 
>> 
>>  
>> 
>> On Mon, Apr 15, 2013 at 7:35 AM, Justin Richer <jric...@mitre.org> wrote:
>> 
>> What would you suggest for wording here, then? Keeping in mind that we 
>> cannot (and don't want to) prohibit expression-based scopes. 
>> 
>>  -- Justin
>> 
>>  
>> 
>> On 04/15/2013 10:33 AM, Tim Bray wrote:
>> 
>> No, I mean it’s not interoperable at the software-developer level.  I can’t 
>> register scopes at authorization time with any predictable effect that I can 
>> write code to support, either client or server side, without out-of-line 
>> non-interoperable knowledge about the behavior of the server.  
>> 
>>  
>> 
>> I guess I’m just not used to OAuth’s culture of having no expectation that 
>> things will be specified tightly enough that I can write code to implement 
>> as specified.  -T
>> 
>>  
>> 
>> On Mon, Apr 15, 2013 at 7:15 AM, Justin Richer <jric...@mitre.org> wrote:
>> 
>> Scopes aren't meant to be interoperable between services since they're 
>> necessarily API-specific. The only interoperable bit is that there's *some* 
>> place to put the values and that it's expressed as a bag of space-separated 
>> strings. How those strings get interpreted and enforced (which is really 
>> what's at stake here) is up to the AS and PR (or a higher-level protocol 
>> like UMA).
>> 
>>  -- Justin
>> 
>>  
>> 
>> On 04/15/2013 10:13 AM, Tim Bray wrote:
>> 
>> This, as written, has zero interoperability.  I think this feature can 
>> really only be made useful in the case where scopes are fixed strings.
>> 
>> -T
>> 
>> On Apr 15, 2013 6:54 AM, "Justin Richer" <jric...@mitre.org> wrote:
>> 
>> You are correct that the idea behind the "scope" parameter at registration 
>> is a constraint on authorization-time scopes that are made available. It's 
>> both a means for the client to request a set of valid scopes and for the 
>> server to provision (and echo back to the client) a set of valid scopes.
>> 
>> I *really* don't want to try to define a matching language for scope 
>> expressions. For that to work, all servers would need to be able to process 
>> the regular expressions for all clients, even if the servers themselves only 
>> support simple-string scope values. Any regular expression syntax we pick 
>> here is guaranteed to be incompatible with something, and I think the 
>> complexity doesn't buy much. Also, I think you suddenly have a potential 
>> security issue if you have a bad regex in place on either end. 
>> 
>> As it stands today, the server can interpret the incoming registration 
>> scopes and enforce them however it wants to. The real trick comes not from 
>> assigning the values to a particular client but to enforcing them, and I 
>> think that's always going to be service-specific. We're just not as clear on 
>> that as we could be.
>> 
>> After looking over everyone's comments so far, I'd like to propose the 
>> following text for that section:
>> 
>> 
>> 
>>    scope
>>       OPTIONAL.  Space separated list of scope values (as described in
>>       OAuth 2.0 Section 3.3 [RFC6749]) that the client can use when 
>>       requesting access tokens.  As scope values are service-specific, 
>>       the Authorization Server MAY define its own matching rules when
>>       determining if a scope value used during an authorization request
>>       is valid according to the scope values assigned during 
>>       registration. Possible matching rules include wildcard patterns,
>>       regular expressions, or exactly matching the string. If omitted, 
>>       an Authorization Server MAY register a Client with a default 
>>       set of scopes.
>> 
>> Comments? Improvements?
>> 
>>  -- Justin
>> 
>> 
>> 
>> On 04/14/2013 08:23 PM, Manger, James H wrote:
>> 
>> Presumably at app registration time any scope specification is really a 
>> constraint on the scope values that can be requested in an authorization 
>> flow.
>>  
>> So ideally registration should accept rules for matching scopes, as opposed 
>> to actual scope values.
>>  
>> You can try to use scope values as their own matching rules. That is fine 
>> for a small set of "static" scopes. It starts to fail when there are a large 
>> number of scopes, or scopes that can include parameters (resource paths? 
>> email addresses?). You can try to patch those failures by allowing services 
>> to define service-specific special "wildcard" scope values that can only be 
>> used during registration (eg "read:*").
>>  
>> Alternatively, replace 'scope' in registration with 'scope_regex' that holds 
>> a regular expression that all scope values in an authorization flow must 
>> match.
>>  
>> --
>> James Manger
>> _______________________________________________
>> 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
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to