> Am 17.12.2019 um 21:03 schrieb Vittorio Bertocci > <[email protected]>: > > >> The one-RS-per-AT model is an ideal that simply doesn’t match reality. > That's a pretty strong statement :) I have worked with a very large number of > developers, on a very large number of applications. I don't dispute that your > experience might be different, but the one AT per RS is daily reality for > hundreds of thousands of apps in production today. That's real by any measure > of reality.
I second this statement. I have worked in a large deployment that strictly uses per RS ATs. > The fact that AD offers RTs that behave like TGTs makes it possible. Funny, I assume any solution based on or inspired by Kerberos (like ours) works that way ;-) > RAR is an interesting development, but it's in the inception phase. The aud > and scopes claims are already in nearly all the proprietary JWT > implementations in production today, as shown in the research I presented > when the draft was adopted by the WG, hence it seems natural to include them > in an interop profile. Scopes can be used to identify RSs in the authorization request (and turned into aud in a token), but that’s not interoperable. Resource indicators is the first step towards interoperable means to obtain RS-specific tokens, RAR is the next evolution. > Nothing prevents us from developing it further as new approaches gain > traction on the market, but for the time being I think the value of this > would be to bring some order in existing implementations and contain abuses > such as id_tokens used in lieu of access tokens today. I think including scope and aud in the JWT profile is ok but it’s not sufficient for true interoperability. > >> I’m skeptical of the idea that there is just one level of client identity >> proofing that RSes might care about. > In the scenario that led me to include this item in the discussion, knowledge > of that level isn't necessary. Again, I agree it would be useful to define > those levels, but I don't think it would be in scope here. If inclusion of > that info in the JWT AT would be conditional to do all that work, I'd much > rather drop that aspect in favor of making faster progress. > >> Without taking the whole picture into account, there is significant risk >> that we will define something that turns out to be woefully insufficient (or >> worse, establishes an anti-pattern). That said, I agree that it’s probably >> not appropriate for this draft, and recommend dropping these claims. They >> can always be defined in a separate draft, along with the other elements >> necessary to communicate step-up requirements. > Could you expand on a concrete scenario that would lead to an antipattern > because of the presence of those claims in the profile? > There is already logic out there predicated on those claim values, precisely > because ID_token defines them and vendors latch onto them. I am concerned > that if we don't include those claims in the profile, people will simply keep > using ID_tokens for calling APIs. > > >> On Tue, Dec 17, 2019 at 11:39 AM Richard Backman, Annabelle >> <[email protected]> wrote: >> > In any case the intent was always to only allow a singe resource per AT… >> >> >> >> My confusion actually comes from the last paragraph of §3, where it says “If >> a scope parameter is present in the request, the authorization server SHOULD >> use it to infer the value of the default resource indicator to be used in >> the aud claim.” I interpreted that to leave room for an AS inferring the >> same “generic” resource indicator for resources served by different RSes. >> The one-RS-per-AT model is an ideal that simply doesn’t match reality. >> Clients don’t want to have to juggle a bunch of different tokens, nor should >> they need to. I’m coming to think that we shouldn’t actually use `aud` and >> `scope` in JWT ATs at all, and instead adopt the structure RAR defines used >> for the `authorization_details` parameter (I think some iteration is >> required, but it seems natural for these two to describe authorizations in >> the same or compatible ways). >> >> >> >> >> >> > …the resource wants to know whether this particular token was obtained >> > proving the identity of the client… >> >> >> >> I’m skeptical of the idea that there is just one level of client identity >> proofing that RSes might care about. There might be some clear lines that >> can be drawn, but we should be explicit about what those lines represent, >> e.g., “client authenticated using pre-established credential”, “client is >> running on end user-controlled device”, etc. >> >> >> >> >> >> > I am not trying to create a complete framework for handling step up and >> > the like, I am trying to create an interoperable representation of those >> > values no matter how they were obtained. >> >> >> >> Without taking the whole picture into account, there is significant risk >> that we will define something that turns out to be woefully insufficient (or >> worse, establishes an anti-pattern). That said, I agree that it’s probably >> not appropriate for this draft, and recommend dropping these claims. They >> can always be defined in a separate draft, along with the other elements >> necessary to communicate step-up requirements. >> >> >> >> – >> >> Annabelle Richard Backman >> >> AWS Identity >> >> >> >> >> >> From: Vittorio Bertocci <[email protected]> >> Date: Monday, December 16, 2019 at 9:31 PM >> To: "Richard Backman, Annabelle" <[email protected]> >> Cc: IETF oauth WG <[email protected]>, Vittorio Bertocci <[email protected]>, >> "[email protected]" <[email protected]> >> Subject: [UNVERIFIED SENDER] Re: [OAUTH-WG] I-D Action: >> draft-ietf-oauth-access-token-jwt-03.txt >> >> >> >> Re: aliases, I see where the confusion is coming from! >> >> I updated the request section, but the session 2.2 data structure still >> mentions the aliases. That should be cleaned up as well. >> >> In any case the intent was always to only allow a singe resource per AT, the >> alias list was only for helping in cases where an AS identifies the same >> resource thru multiple IDs and the actual aud value depends on what ID the >> client requested. However we discussed this with Brian and he convinced me >> that it was just too ambiguous- your remark reinforces that impression. I’ll >> clean up 2.2 and eliminate references to aliases from there as well. >> >> Thanks! >> >> >> >> >> >> On Mon, Dec 16, 2019 at 20:19 Vittorio Bertocci <[email protected]> wrote: >> >> Thanks Annabelle. >> >> >> >> Does a mobile app that uses Dynamic Client Registration to establish a >> client secret count as an “authenticated client”? >> >> I think it should count, tho I am not sure what the RS would do with it. >> Dynamic client registration would likely not have much use for this. >> >> In the cases I have seen, the idea is that a client (whose clientID is >> already known to the RS) can obtain tokens thru different grants, some of >> them confidential and others public; and the resource wants to know whether >> this particular token was obtained proving the identity of the client so >> that it can decide whether to grant extra privileges for that particular >> client in the current call. This scenario does not require the extra details >> about authentication method/strength you mention that, I agree, would be >> pretty hard to reach consensus on. >> >> TL;DR: there is at least one scenario that is satisfied by the simple bool, >> as the previous knowledge of the client solves the issues you mention out of >> band. >> >> >> >> authentication session properties: >> >> Let me try another angle. Say that I perform an authz code grant asking for >> AT, ID_T and RT- obtaining AT', ID_T' and RT'. >> >> The values of auth_time, acr and amr in AT' will be the same as the >> corresponding claims in ID_T'. When the client uses RT' to obtain AT`N, >> AT'N+1 etc etc, the values of those claims will remain the same for every >> AT'n obtained by RT'. >> >> Now, imagine that something happens (ignore what for the time being) that >> causes the client to perform a step up auth, which requires the user to >> perform interactive auth hence results in a new authz grant. The client will >> obtain a new tuple AT", ID_T" and RT". The exact same rules described for >> the ' tuple apply, with the new values determined by the new authentication: >> AT" auth_time/acr/amr will be the same as ID_T", and those values will >> remain unchanged for every AT"n derived by RT". >> If we want this to apply to the implicit flow as well, you can substitute >> the RT with the session artifact. >> >> Does that help clarifying the intent? If yes, do you feel that the current >> language does not describe this? >> >> >> >> use case for putting these in the access token >> >> I am not trying to create a complete framework for handling step up and the >> like, I am trying to create an interoperable representation of those values >> no matter how they were obtained. >> >> Consider the case in which an API allows certain operations only if a given >> amr value is present in the token. Whether that amr is required upfront on >> first authentication, as step up or any other reason is out of scope for >> this profile IMO: the AS might have all sorts of heuristics that determine >> that (user membership to a given group or role; geofencing; risk scoring; >> etc) that have nothing to do with scopes requested, and are not statically >> determined by RS-AS communications. >> >> Now, I agree that formalizing how a RS communicates to the AS via the client >> the need to step up and in what terms would be super useful; however I think >> that's well beyond the scope of this profile.. Various vendors already have >> their own mechanisms for handling step up signaling from RS to AS (I am very >> familiar with the Microsoft one) and all I am looking for is a way of >> standardizing how to represent the outcomes, so that API gateways and SDK >> providers can provide tools that work across vendors; and possibly reuse >> some of the reasoning that was already done for id_tokens. >> >> TL;DR: I think we are doing something useful in formalizing how to embed >> that info an ATs even if we don't force vendors to give up their current >> mechanisms to populate those values. >> >> >> >> Regarding access tokens that are used to access different resource servers >> >> The intent is to explicitly disallow the use of an AT with multiple resource >> servers. If a client wants to talk with 2 different RSes, the client should >> ask for 2 different ATs. >> >> The spec is unambiguous on this IMO, here's the language I use in 03. >> >> >> >> If it receives a request for an access token containing more than one >> resource parameter, an authorization server issuing JWT access tokens >> MUST reject the request and fail with "invalid_request" as described >> in section 4.1.2.1 of [RFC6749] or with "invalid_target" as defined >> in section 2 of [ResourceIndicators]. See Section 2.2 and Section 5 >> for more details on how this measure ensures there's no confusion on >> to what resource the access token granted scopes apply. >> Is it possible you are referring to an older draft? >> >> >> >> >> >> On Mon, Dec 16, 2019 at 5:28 PM Richard Backman, Annabelle >> <[email protected]> wrote: >> >> 1. Regarding AuthenticatedClient: >> >> Does a mobile app that uses Dynamic Client Registration to establish a >> client secret count as an “authenticated client”? What if that registration >> included an assertion signed by a trusted entity (e.g., device management >> software) using a certificate that had been pushed to the device? Without >> some kind of NIST LoA-style definition of “authenticated”, a single Boolean >> “AuthenticatedClient” value is too ambiguous to be useful. However, I’m >> skeptical that we could find consensus on what that definition should be, >> and it may be better to define client analogs to `acr` and `amr` that >> provide standard ways of expressing client authentication details without >> getting prescriptive about what kind of authentication is “good enough.” >> >> >> >> 2. Regarding authentication session properties: >> >> I’m confused by the definitions given for `auth_time`, `acr`, and `amr`. For >> `auth_time`, it says: >> >> >> >> “…its value will either remain the same for all the JWT access tokens issued >> within that session or be updated to the time of latest authentication if >> reauthentication occurred mid-session…” >> >> >> >> But the “For example” at the end of that definition implies that `auth_time` >> will not be updated. The definitions for `acr` and `amr` say the same, but >> also say that the “…same considerations presented for auth_time apply…” >> What’s the intention here: are they fixed, updated, or is it up to the >> deployment to decide? >> >> >> >> I’d like to better understand the use case for putting these in the access >> token. If the RS is making authorization decisions based on these claims, >> that implies that the RS cannot rely on the AS to determine (e.g., from the >> requested scope) the required authentication method(s), freshness, etc. If >> the AS could be relied upon for this, then presumably it would not issue RTs >> and ATs for a scope without requiring the end user to meet the appropriate >> authentication requirements. If this is the case, then the RS must have a >> way to signal to the client (and then the AS) that a step-up authentication >> is required. Is there an existing mechanism through which they could do >> this? All I can come up with is cramming the information into the scope >> attribute of a WWW-Authenticate challenge, but that has the same scope >> opacity violation problem as described in this draft’s Security >> Considerations.. Without a clear way to express the step-up requirements, >> this feels incomplete.. >> >> >> >> 3. Regarding access tokens that are used to access different resource >> servers: >> Reading between the lines, I *think* the intention is that a JWT access >> token that is intended to be used to access two different resources at two >> different RSes should look something like: >> >> >> >> { >> >> "aud": "https://generic-resource-indicator.example.com/", >> >> "scope": "resource_foo resource_bar", >> >> ... >> >> } >> >> >> And the expectation is that each RS should recognize that generic audience. >> Is this correct? If so it seems to go against the spirit of resource >> indicators as indicating the target or location of a resource. It’s >> stretching that definition, at the very least. >> >> >> >> But as I said, I’m reading between the lines here. If this is the intention, >> it should be clearly stated. Alternatively, remove (or change to a SHOULD) >> the requirement that multi-value `aud` claims must only contain aliases for >> the same resource indicator. >> >> >> >> – >> >> Annabelle Richard Backman >> >> AWS Identity >> >> >> >> >> >> From: OAuth <[email protected]> on behalf of Vittorio Bertocci >> <[email protected]> >> Date: Monday, December 16, 2019 at 2:51 PM >> To: IETF oauth WG <[email protected]> >> Cc: "[email protected]" <[email protected]> >> Subject: Re: [OAUTH-WG] I-D Action: draft-ietf-oauth-access-token-jwt-03.txt >> >> >> >> Dear all, >> I finally found the time to push a new draft of the JWT profile for ATs. >> This version incorporates the feedback kindly provided by Brian and Aaron at >> IETF105. >> Unfortunately I didn't have a chance to participate to IETF106, hence we >> didn't do much progress since then. >> There are still two areas we didn't manage to reach consensus on: >> >> 1. Mechanisms for signaling whether the AT was obtained by a user or an >> application >> >> This point was the subject of intense debate on the list leading to >> IETF105... >> One insight that emerged from the IETF105 discussion was that the use case >> here is more about whether the AT has been obtained via a grant that >> authenticated the client (regardless of what specific grant was used) vs a >> public client grant- that information can be relevant to a resource as it >> determines whether the identity of the client can be used in authorization >> decisions (in the former case) or not (in the public client case). If that's >> the scenario we are truly after, a simple, possibly optional boolean claim >> (say AuthenticatedClient) would suffice. >> Note for the people who didn't read the spec: I removed any reference to >> this already in draft-ietf-oauth-access-token-jwt-01. I think this is an >> important and useful info and standardizing it would be beneficial for >> middleware and SDK creators, but ultimately this is an interop profile hence >> if there's no strong desire to reach an agreement here, I am also OK with >> dropping the matter and not address this function in the spec. >> To summarize, I have two questions here: >> >> A. Do we believe it's worth it to formalize in the profile a mechanism to >> indicate whether the client th obtained the AT authenticated itself with the >> AS? >> B. If yes, are you OK wiht an optional bool claim here? >> >> >> 2. Claims indicating session properties >> >> This is one area where I am far more passionate about, as it represents a >> fundamental aspect that production systems (and in particular 1st party >> solutions) already rely on in the current proprietary JTW ATs. >> The profile currently includes the claims auth_time, acr and amr - capturing >> the values of those properties at the time of the latest authentication the >> user performed in the session used to issue the current AT: at session >> creation, at auth step up time and so on. >> Those are values that API need in order to make authorization decisions; in >> the case of 1st party APIs, the AT is the only artifact they ever receive >> hence there is no other way for an API to determine whether the caller >> performed say MFA in order to obtain the current AT. >> Since the first draft, some people signaled concerns about the current >> mechanisms thru which those claims get their value. For example, it has been >> proposed to maintain the original values of auth_time, acr & amr and >> introduce additional claims to indicate changes (like stepup). >> I am not clear on what cold go wrong with the current approach, hence I >> don't have an immediate grasp of how changes like the above would help. >> If the people uncomfortable with the current proposal could detail their >> concern, we can brainstorm ways to make that info available to API in a >> safer way. To summarize: >> >> A. Do you have concerns with the current auth_time, arm, acr proposal? Can >> you spell them out? (please read the relevant parts of the spec before >> chiming in :)) >> B. If yes, what can we do to make that info available to RSs in a way that >> makes you comfortable? >> >> >> >> Thanks >> >> V. >> >> >> >> On Mon, Dec 16, 2019 at 2:49 PM <[email protected]> wrote: >> >> >> A New Internet-Draft is available from the on-line Internet-Drafts >> directories. >> This draft is a work item of the Web Authorization Protocol WG of the IETF. >> >> Title : JSON Web Token (JWT) Profile for OAuth 2.0 Access >> Tokens >> Author : Vittorio Bertocci >> Filename : draft-ietf-oauth-access-token-jwt-03.txt >> Pages : 16 >> Date : 2019-12-16 >> >> Abstract: >> This specification defines a profile for issuing OAuth 2.0 access >> tokens in JSON web token (JWT) format. Authorization servers and >> resource servers from different vendors can leverage this profile to >> issue and consume access tokens in interoperable manner. >> >> >> The IETF datatracker status page for this draft is: >> https://datatracker.ietf.org/doc/draft-ietf-oauth-access-token-jwt/ >> >> There are also htmlized versions available at: >> https://tools.ietf.org/html/draft-ietf-oauth-access-token-jwt-03 >> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-access-token-jwt-03 >> >> A diff from the previous version is available at: >> https://www.ietf.org/rfcdiff?url2=draft-ietf-oauth-access-token-jwt-03 >> >> >> Please note that it may take a couple of minutes from the time of submission >> until the htmlized version and diff are available at tools.ietf.org. >> >> Internet-Drafts are also available by anonymous FTP at: >> ftp://ftp...ietf.org/internet-drafts/ >> >> _______________________________________________ >> OAuth mailing list >> [email protected] >> https://www.ietf.org/mailman/listinfo/oauth >> >> _______________________________________________ >> OAuth mailing list >> [email protected] >> https://www.ietf.org/mailman/listinfo/oauth >> > _______________________________________________ > OAuth mailing list > [email protected] > https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________ OAuth mailing list [email protected] https://www.ietf.org/mailman/listinfo/oauth
