Thanks for the context, Dick. Given that, I agree that the majority of my
suggestions aren't in scope for 2.1. I do think that
refresh_token_expires_in is worthy of continued discussion for 2.1,
however, given that 2.1 introduces a mandate for either RT rotation or
binding for public clients. refresh_token_expires_in can be directly
related to rotation. However, I can continue that discussion on the github
thread
<https://github.com/oauth-wg/oauth-v2-1/issues/187#issuecomment-2350781735>
that Warren linked.

Rifaat: I will be attending IETF 122 in person, and I would definitely be
interested in a session on possible inclusions for a hypothetical 2.2 spec
or standalone extensions. Given that I have no prior experience writing
specs, I'm not sure I'd be able to draft something presentable.

Nick

On Thu, Jan 30, 2025 at 8:19 AM Rifaat Shekh-Yusef <rifaat.s.i...@gmail.com>
wrote:

> Hi Nick,
>
> +1 to what Dick stated below.
>
> The best way forward is for you to write a draft, present and discuss it
> during one of the coming IETF meetings.
> The next meeting is IETF122 in Bangkok; if you cannot attend in person,
> you can present remotely.
> https://www.ietf.org/meeting/122/
>
> Regards,
>  Rifaat
>
>
> On Thu, Jan 30, 2025 at 11:08 AM Dick Hardt <dick.ha...@gmail.com> wrote:
>
>> Nick: Thanks for providing your feedback. This is the perfect medium for
>> discussions on IETF standards.
>>
>> A condition in the working group in agreeing to work on OAuth 2.1 was
>> that it did not introduce anything new -- it was to capture and condense
>> the collection of published OAuth 2.0 related documents so that
>> implementers had a single core reference that did not have outdated
>> information.
>>
>> Given that, we won't be able to include them in OAuth 2.1. While the
>> suggestion to file the issues on GitHub by Warren is well intended -- we
>> are only working on improving the draft language to provide better clarity
>> -- not on normative changes that are not already specified
>>
>> I'm sure that your suggestions are reasonable and are based on your
>> operating experience and are worthy of discussion.
>>
>> I'm not sure what the best path forward is for your suggestions --
>> typically it would be a draft that would provide normative language, and
>> the additional codes would be added to the appropriate IANA registries,
>> which are referenced in OAuth 2.1
>>
>> /Dick
>>
>>
>>
>> On Thu, Jan 30, 2025 at 10:39 AM Warren Parad <wparad=
>> 40rhosys...@dmarc.ietf.org> wrote:
>>
>>> Rather than trying to hash each of these out here over email, which is a
>>> poor mechanism for it, I would recommend commenting on the github repo with
>>> exactly the problem, eg "the user story" that encourages the need for
>>> having each of these. However I would caution right now the stories you are
>>> providing aren't strong. Additionally this is 2.1 no OAuth 3.0, it's
>>> semantic for a reason, the focus is on security improvements. So I might
>>> recommend, out of the ones you've provided, focusing on only the top one or
>>> two most critically important for you in your current situation that have
>>> real security implications or currently impossibly challenging problems for
>>> RS/Users/Clients <https://rs.corp.google.com/Users/Clients>.
>>>
>>> Just as a for example:
>>>
>>>> but it allows them to optimize the experience in the happy path (token
>>>> expires when stated).
>>>
>>>
>>> So what? Why does it matter? "better optimize" How exactly? What's the
>>> alternative? If Google and Microsoft want to expose potential privacy data
>>> for unauthenticated users, they definitely can, but I will personally die
>>> on this hill. Until the user is authenticated, exposing any data regarding
>>> the user could not be more wrong. If AS still want to do it, nothing is
>>> stopping them, but we shouldn't add nonsense to a standard that will cause
>>> people who follow it to be­—more confused and less secure.
>>>
>>> Concrete examples go a long way to fruitful discussion otherwise the
>>> discussion is only academic and lacks any real impact.
>>>
>>> On Thu, Jan 30, 2025 at 12:32 AM Nick Watson <nwatson=
>>> 40google....@dmarc.ietf.org> wrote:
>>>
>>>> For refresh_token_expires_in, the argument seems to hinge on the idea
>>>> that "client can't do anything useful with the knowledge of the refresh
>>>> token expiration time". But that isn't the case, as we have received
>>>> several requests from clients to expose this information so that the client
>>>> can remind the user to do a renewal/reconsent ahead of time to prevent
>>>> disruption of service. It's not to say that the client is off the hook from
>>>> handling expired tokens, but it allows them to optimize the experience in
>>>> the happy path (token expires when stated).
>>>>
>>>> For 3.2.4 access_denied, yes it would be a 403 for AS-initiated
>>>> denials, but there's no corresponding spec-defined error code for it. Given
>>>> that access_denied is already defined for authorization response for AS or
>>>> user denials, it provides parity with that.
>>>>
>>>> For 3.2.4 additional error code, the only thing I had in mind is that
>>>> some RPs pop something up to the user asking them to reconsider granting
>>>> access, if denied. An AS-initiated error signal would indicate that
>>>> wouldn't help. I don't feel that strongly about this one, though. Curious
>>>> to hear if anyone else has use cases.
>>>>
>>>> display_uri - I had it in mind entirely for things that the user should
>>>> see and/or do, so the AS isn't conveying any instructions to the RP beyond
>>>> "please open this URL if possible so the user can see it". Reauth and
>>>> richer errors were the two things I thought of; other people may have
>>>> other use cases.  If we wanted to support a real recovery flow, then that
>>>> would certainly need more details for RP-AS communication.
>>>>
>>>> For scope in 4.1.2, I do think it's very useful to at least define this
>>>> parameter here, even if with MAY.  RPs could, for example, tell the user
>>>> which features will be disabled given their choices, and give them an
>>>> option to redo consent. (I don't think that's malicious or pleading.)  It
>>>> will also be useful during the transition phase from 2.0 to 2.1 for
>>>> authorization servers that still support the implicit flow for backwards
>>>> compatibility reasons.
>>>>
>>>> Nick
>>>>
>>>> On Wed, Jan 29, 2025 at 2:37 PM Warren Parad <wparad=
>>>> 40rhosys...@dmarc.ietf.org> wrote:
>>>>
>>>>> For the 3.2.3 Token Response, I believe it is quite clear why that
>>>>> should be rejected via this great response from Aaron:
>>>>> https://github.com/oauth-wg/oauth-v2-1/issues/187#issuecomment-2350781735
>>>>>
>>>>> For 3.2.4 access_denied, I believe the current solution is a 401 or
>>>>> 403 status code, isn't it? Adding error codes to that response is a bit
>>>>> unnecessary, I would say.
>>>>>
>>>>> For 3.2.4 additional error codes don't seem appropriate as the client
>>>>> can't do anything different; this just requires forcing them to explicitly
>>>>> handle each of these. Less error codes are better unless there is a
>>>>> specific different flow we expect the client to go through. Do you believe
>>>>> there is a user relevant flow that would be different based on the
>>>>> different error codes?
>>>>>
>>>>> I like the 3.2.4 display_uri concept, but it is rife with two problems
>>>>> in practice:
>>>>>
>>>>>    - The solution is usually for an owner of the client to do
>>>>>    something related to the AS, not the user who receives the error, so it
>>>>>    doesn't do any good returning it, AND it is often exposing something 
>>>>> about
>>>>>    the flow to the user that shouldn't be exposed.
>>>>>    - The actual instructions that might need to be conveyed are more
>>>>>    complex than just a single parameter. Right now this information would 
>>>>> be
>>>>>    included in the error_description is valuable, I don't see automation 
>>>>> being
>>>>>    able to do anything clever if this was exposed differently, do you?
>>>>>
>>>>> For the 4.1.2 The authorization response is just a *code* and not
>>>>> complete, focing authorization servers to unnecessarily look up this
>>>>> information doesn't make sense. It could be MAY at best for me. Did you
>>>>> mean to add this to the 3.2.3 Token Response, and it is already exactly
>>>>> defined like this:
>>>>>
>>>>> RECOMMENDED, if identical to the scope requested by the client;
>>>>>> otherwise, REQUIRED. The scope of the access token as described by 
>>>>>> Section
>>>>>> 1.4.1.
>>>>>
>>>>>
>>>>>  If you did intend for it to be added to the 4.1.2 I'm going to have
>>>>> to hard disagree, this is exposing information at a time before it is
>>>>> absolutely necessary. The Token doesn't exist before here, so there is
>>>>> nothing the client could do anyway. Is there a reason you would see
>>>>> absolutely needing to know this information before the auth_code flow is
>>>>> complete? Surely even if the user rejected some scopes, you still want to
>>>>> complete the flow and capture the access_token and refresh_token that the
>>>>> AS is going to generate, right? That feels like a better moment to direct
>>>>> the user through some other flow. However even if we embrace the idea of
>>>>> returning the scopes on the redirect back in the authorization response, I
>>>>> can't see what a client would do. The only thing they could attempt to do
>>>>> is plead with the user to accept those scopes. That's a pretty malicious
>>>>> thing to do, the user already rejected those scopes, forcing them through
>>>>> the exact same flow again is not something that makes sense, at least to
>>>>> me, but it isn't the case that this should be SHOULD let alone MUST.
>>>>>
>>>>> I hope each of my concerns are clear, but I'm happy to try to explain
>>>>> any of them in more detail.
>>>>>
>>>>> - Warren
>>>>>
>>>>> On Wed, Jan 29, 2025 at 11:13 PM Nick Watson <nwatson=
>>>>> 40google....@dmarc.ietf.org> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I am new to IETF so apologies if I'm not doing this correctly. I had
>>>>>> a few suggestions for things to add to the 2.1 spec based on scenarios
>>>>>> encountered from running a large authorization server. Let me know your
>>>>>> thoughts or if I should be using a different channel (like github) to
>>>>>> contribute issues/suggestions.
>>>>>>
>>>>>> --
>>>>>>
>>>>>> In “3.2.3. Token Response”, I think it’s worth defining a refresh
>>>>>> token expiration parameter. This could be useful both for refresh token
>>>>>> rotation (as discussed in section 4.3.1.) as well as supporting user
>>>>>> selection of shorter-lived access.  A quick search suggests that there’s
>>>>>> some existing usage of refresh_token_expires_in as a parameter name
>>>>>> (Microsoft, GitHub).
>>>>>>
>>>>>> In “3.2.4. Error Response”, it would be worth adding access_denied as
>>>>>> a valid error code here for cases where the authorization server denies 
>>>>>> the
>>>>>> request. (For example, an enterprise user granted access in the past, but
>>>>>> their admin has since disabled the client or scope for their org.)
>>>>>>
>>>>>> In “3.2.4. Error Response” and “4.1.2.1. Error Response”, is it worth
>>>>>> adding another error code like access_denied_by_authorization_server (bad
>>>>>> name, I know) for cases where the authorization server feels it’s useful
>>>>>> and appropriate to distinguish between resource owner denial and
>>>>>> authorization server denial? This may not be needed as authorization
>>>>>> servers are already free to define their own error code extensions, but a
>>>>>> single umbrella error code could be useful for simpler implementations.
>>>>>>
>>>>>> In “3.2.4. Error Response” (and maybe also 5.3.1), it would be useful
>>>>>> to have some sort of “display_uri” parameter that the authorization 
>>>>>> server
>>>>>> can provide for RPs to open in a browser if they are able. This 
>>>>>> display_uri
>>>>>> could be used to show a richer error to the resource owner or even be 
>>>>>> used
>>>>>> for recovery (e.g. reauth). We could also try to spec out what a 
>>>>>> full-blown
>>>>>> token endpoint-initiated recovery flow might look like.
>>>>>>
>>>>>> In “4.1.2. Authorization Response”, I think we should say that the
>>>>>> authorization server MUST return a scope parameter if the RP included 
>>>>>> scope
>>>>>> in the request and the granted scopes differ from the requested scopes.
>>>>>> This allows RPs to be informed if the resource owner only grants partial
>>>>>> consent.
>>>>>>
>>>>>> - Nick Watson
>>>>>> _______________________________________________
>>>>>> OAuth mailing list -- oauth@ietf.org
>>>>>> To unsubscribe send an email to oauth-le...@ietf.org
>>>>>>
>>>>> _______________________________________________
>>>>> OAuth mailing list -- oauth@ietf.org
>>>>> To unsubscribe send an email to oauth-le...@ietf.org
>>>>>
>>>>
>>>> _______________________________________________
>>> OAuth mailing list -- oauth@ietf.org
>>> To unsubscribe send an email to oauth-le...@ietf.org
>>>
>> _______________________________________________
>> OAuth mailing list -- oauth@ietf.org
>> To unsubscribe send an email to oauth-le...@ietf.org
>>
>

-- 
Nick Watson | Software Engineer | nwat...@google.com | (781) 608-3352
_______________________________________________
OAuth mailing list -- oauth@ietf.org
To unsubscribe send an email to oauth-le...@ietf.org

Reply via email to