It may be programmatically equiv but from a trust perspective very different.
Usually client cred flows are from trusted entities and fixed endpoints. Phil > On Feb 21, 2020, at 5:05 PM, Richard Backman, Annabelle > <richanna=40amazon....@dmarc.ietf.org> wrote: > > ROPC without a client ID or authentication is functionally equivalent to > Client Credentials grant with client secret authentication in the request > body. You've just renamed "client_id" to "username" and "client_secret" to > "password". > > The AS simply needs to be able to resolve the client ID to the service > account. You could use any of the following strategies, depending on the > environment: > * Use service account identifiers as client IDs > * Use encrypted blobs containing service account identifiers as client IDs, > so someone can't choose a client ID by creating a service account with a > specific identifier > * Use opaque values that the AS can resolve to service account identifiers, > e.g., via a database lookup > > If the AS needs the service account's password because it's authenticating > against a legacy system, then use the service account password as the client > secret. Stack mTLS on top, if you want. If the AS just needs to resolve the > account so it can put it in tokens that RSes will look at, then you can use > whatever client authentication mechanism you want. > > Is there a scenario I'm missing here? > > – > Annabelle Backman (she/her) > AWS Identity > https://aws.amazon.com/identity/ > > > On 2/21/20, 1:53 PM, "Neil Madden" <neil.mad...@forgerock.com> wrote: > > The AS doesn’t issue the service account IDs, that’s the whole point - > integration with existing systems. Lot’s of people don’t have the luxury of > rebuilding systems from scratch to fit in with the preferences of the OAuth > WG. > > ROPC doesn’t require client authentication, or even a client identifier. > If you’re using a service account you indeed don’t need to bother issuing > client credentials. The same is true when using the JWT bearer grant. If you > want to increase security you can use cert-bound access tokens. > >> On 21 Feb 2020, at 20:28, Richard Backman, Annabelle <richa...@amazon.com> >> wrote: >> >> The client IDs can still be opaque identifiers provided by the AS, they just >> happen to be associated with specific service accounts. Or they could be the >> opaque IDs that the AS already issued for the service account. Either way, >> the AS could issue a token with the appropriate subject and other claims for >> the service account. >> >> If your client identity is bound to a specific service account identity >> (i.e., the resource owner), then ROPC reduces down to Client Credentials. >> What's the point in passing two identifiers and two credentials for the same >> identity? >> >> – >> Annabelle Backman (she/her) >> AWS Identity >> https://aws.amazon.com/identity/ >> >> >> On 2/21/20, 6:48 AM, "OAuth on behalf of Neil Madden" >> <oauth-boun...@ietf.org on behalf of neil.mad...@forgerock.com> wrote: >> >> Sorry, I missed that message. >> >> While this may be a solution in specific circumstances, I don’t think it’s >> a general solution. e.g. an AS may not allow manually choosing the client_id >> to avoid things like >> https://tools.ietf.org/html/draft-ietf-oauth-security-topics-14#section-4.13 >> or may return different introspection results for client credentials tokens >> (e.g. with no “sub”) and so on. In practice, this adds even more steps for >> somebody to migrate from existing ROPC usage. >> >> This is asking people to make fundamental changes to their identity >> architecture rather than simply switching to a new grant type. >> >> — Neil >> >>>> On 21 Feb 2020, at 14:34, Torsten Lodderstedt <tors...@lodderstedt.net> >>>> wrote: >>> >>> I see - we have gone full cycle :-) >>> >>> Annabelle’s proposal would solve that. Relate a client id to a service >>> account and obtain the token data from there. >>> >>>> On 21. Feb 2020, at 15:31, Neil Madden <neil.mad...@forgerock.com> wrote: >>>> >>>> Yes, that is great. But mTLS doesn’t support service accounts (!= >>>> clients). Maybe it should? Should there be a mTLS *grant type*? >>>> >>>> — Neil >>>> >>>>> On 21 Feb 2020, at 14:20, Torsten Lodderstedt <tors...@lodderstedt.net> >>>>> wrote: >>>>> >>>>> Have you ever tried the client credentials grant with mTLS? After reading >>>>> your description it seems to be simpler than JWT Bearer. >>>>> >>>>> * work out if the AS even supports mTLS >>>>> * work out how to configure the AS to trust my cert(s) >>>>> * Create key pair and cert using openssl >>>>> * Register your (self-signed) cert along with your client_id >>>>> * Configure the HTTP client to use your key pair for TLS Client >>>>> Authentication >>>>> >>>>> Works very well for us. >>>>> >>>>>> On 21. Feb 2020, at 15:12, Neil Madden <neil.mad...@forgerock.com> wrote: >>>>>> >>>>>> No failures, but it is a much more complex grant type to set up, when >>>>>> you consider everything you have to do: >>>>>> >>>>>> * work out if the AS even supports JWT bearer and how to turn it on >>>>>> * work out how to configure the AS to trust my public key(s) >>>>>> - do I have to create a new HTTPS endpoint to publish a JWK Set? >>>>>> * determine the correct settings for issuer, audience, subject, etc. >>>>>> Does the AS impose non-standard requirements? e.g. RFC 7523 says that >>>>>> the JWT MUST contain a “sub” claim, but Google only allows this to be >>>>>> present if your client is doing impersonation of an end-user (which >>>>>> requires additional permissions). >>>>>> * do I need a unique “jti” claim? (OIDC servers do, plain OAuth ones >>>>>> might not) If I do, can I reuse the JWT or must it be freshly signed for >>>>>> every call? >>>>>> * locate and evaluate a JWT library for my language of choice. Monitor >>>>>> that new dependency for security advisories. >>>>>> * choose a suitable signature algorithm (‘ere be dragons) >>>>>> * figure out how to distribute the private key to my service >>>>>> >>>>>> Compared to “create a service account and POST the username and password >>>>>> to the token endpoint” it adds a little friction. (It also adds a lot of >>>>>> advantages, but it is undeniably more complex). >>>>>> >>>>>> — Neil >>>>>> >>>>>> >>>>>>> On 21 Feb 2020, at 13:41, Matthew De Haast >>>>>>> <matt=40coil....@dmarc.ietf.org> wrote: >>>>>>> >>>>>>> I have a feeling that if we had more concise JWT libraries and command >>>>>>> line tools, where using the JWT Bearer grant became a one-liner again >>>>>>> then we wouldn’t be having this conversation. So perhaps removing it is >>>>>>> an incentive to make that happen. >>>>>>> >>>>>>> Neil could you elaborate more on this please. What failures are you >>>>>>> currently experiencing/seeing with the JWT Bearer grant? >>>>>>> >>>>>>> Matt >>>>>>> >>>>>>> On Thu, Feb 20, 2020 at 12:42 AM Neil Madden >>>>>>> <neil.mad...@forgerock.com> wrote: >>>>>>> I have a feeling that if we had more concise JWT libraries and command >>>>>>> line tools, where using the JWT Bearer grant became a one-liner again >>>>>>> then we wouldn’t be having this conversation. So perhaps removing it is >>>>>>> an incentive to make that happen. >>>>>>> >>>>>>> >>>>>>>> On 19 Feb 2020, at 22:01, Dick Hardt <dick.ha...@gmail.com> wrote: >>>>>>>> >>>>>>>> Neil: are you advocating that password grant be preserved in 2.1? Or >>>>>>>> do you think that service account developers know enough about what >>>>>>>> they are doing to follow what is in 6749? >>>>>>>> ᐧ >>>>>>>> >>>>>>>> On Wed, Feb 19, 2020 at 1:52 PM Neil Madden >>>>>>>> <neil.mad...@forgerock.com> wrote: >>>>>>>> OAuth2 clients are often private to the AS - they live in a database >>>>>>>> that only the AS can access, have attributes specific to their use in >>>>>>>> OAuth2, and so on. Many existing systems have access controls based on >>>>>>>> users, roles, permissions and so on and expect all users accessing the >>>>>>>> system to exist in some user repository, e.g. LDAP, where they can be >>>>>>>> looked up and appropriate permissions determined. A service account >>>>>>>> can be created inside such a system as if it was a regular user, >>>>>>>> managed through the normal account provisioning tools, assigned >>>>>>>> permissions, roles, etc. >>>>>>>> >>>>>>>> Another reason is that sometimes OAuth is just one authentication >>>>>>>> option out of many, and so permissions assigned to service accounts >>>>>>>> are preferred over scopes because they are consistently applied no >>>>>>>> matter how a request is authenticated. This is often the case when >>>>>>>> OAuth has been retrofitted to an existing system and they need to >>>>>>>> preserve compatibility with already deployed clients. >>>>>>>> >>>>>>>> See e.g. Google cloud platform (GCP): >>>>>>>> https://developers.google.com/identity/protocols/OAuth2ServiceAccount >>>>>>>> They use the JWT bearer grant type for service account authentication >>>>>>>> and assign permissions to those service accounts and typically have >>>>>>>> very broad scopes. For service-to-service API calls you typically get >>>>>>>> an access token with a single scope that is effectively “all of GCP” >>>>>>>> and everything is managed at the level of permissions on the RO >>>>>>>> service account itself. They only break down fine-grained scopes when >>>>>>>> you are dealing with user data and will be getting an access token >>>>>>>> approved by a real user (through a normal auth code flow). >>>>>>>> >>>>>>>> — Neil >>>>>>>> >>>>>>>>> On 19 Feb 2020, at 21:35, Torsten Lodderstedt >>>>>>>>> <tors...@lodderstedt.net> wrote: >>>>>>>>> >>>>>>>>> Can you explain more in detail why the client credentials grant type >>>>>>>>> isn’t applicable for the kind of use cases you mentioned? >>>>>>>>> >>>>>>>>>> Am 19.02.2020 um 22:03 schrieb Neil Madden >>>>>>>>>> <neil.mad...@forgerock.com>: >>>>>>>>>> >>>>>>>>>> I very much agree with this with regards to real users. >>>>>>>>>> >>>>>>>>>> The one legitimate use-case for ROPC I’ve seen is for service >>>>>>>>>> accounts - where you essentially want something like >>>>>>>>>> client_credentials but for whatever reason you need the RO to be a >>>>>>>>>> service user rather than an OAuth2 client (typically so that some >>>>>>>>>> lower layer of the system can still perform its required permission >>>>>>>>>> checks). >>>>>>>>>> >>>>>>>>>> There are better grant types for this - e.g. JWT bearer - but they >>>>>>>>>> are a bit harder to implement. Having recently converted some code >>>>>>>>>> from ROPC to JWT bearer for exactly this use-case, it went from a >>>>>>>>>> couple of lines of code to two screens of code. For service to >>>>>>>>>> service API calls within a datacenter I’m not convinced this >>>>>>>>>> resulted in a material increase in security for the added complexity. >>>>>>>>>> >>>>>>>>>> — Neil >>>>>>>>>> >>>>>>>>>>> On 18 Feb 2020, at 21:57, Hans Zandbelt >>>>>>>>>>> <hans.zandb...@zmartzone.eu> wrote: >>>>>>>>>>> >>>>>>>>>>> I would also seriously look at the original motivation behind ROPC: >>>>>>>>>>> I know it has been deployed and is used in quite a lot of places >>>>>>>>>>> but I have never actually come across a use case where it is used >>>>>>>>>>> for migration purposes and the migration is actually executed (I >>>>>>>>>>> know that is statistically not a very strong argument but I >>>>>>>>>>> challenge others to come up with one...) >>>>>>>>>>> In reality it turned out just to be a one off that people used as >>>>>>>>>>> an easy way out to stick to an anti-pattern and still claim to do >>>>>>>>>>> OAuth 2.0. It is plain wrong, it is not OAuth and we need to get >>>>>>>>>>> rid of it. >>>>>>>>>>> >>>>>>>>>>> Hans. >>>>>>>>>>> >>>>>>>>>>> On Tue, Feb 18, 2020 at 10:44 PM Aaron Parecki <aa...@parecki.com> >>>>>>>>>>> wrote: >>>>>>>>>>> Agreed. Plus, the Security BCP is already effectively acting as a >>>>>>>>>>> grace period since it currently says the password grant MUST NOT be >>>>>>>>>>> used, so in the OAuth 2.0 world that's already a pretty strong >>>>>>>>>>> signal.. >>>>>>>>>>> >>>>>>>>>>> Aaron >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Feb 18, 2020 at 4:16 PM Justin Richer <jric...@mit.edu> >>>>>>>>>>> wrote: >>>>>>>>>>> There is no need for a grace period. People using OAuth 2..0 can >>>>>>>>>>> still do OAuth 2.0. People using OAuth 2.1 will do OAuth 2.1. >>>>>>>>>>> >>>>>>>>>>> — Justin >>>>>>>>>>> >>>>>>>>>>>>> On Feb 18, 2020, at 3:54 PM, Anthony Nadalin >>>>>>>>>>>>> <tonynad=40microsoft....@dmarc.ietf.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>> I would suggest a SHOULD NOT instead of MUST, there are still >>>>>>>>>>>> sites using this and a grace period should be provided before a >>>>>>>>>>>> MUST is pushed out as there are valid use cases out there still. >>>>>>>>>>>> >>>>>>>>>>>> From: OAuth <oauth-boun...@ietf.org> On Behalf Of Dick Hardt >>>>>>>>>>>> Sent: Tuesday, February 18, 2020 12:37 PM >>>>>>>>>>>> To: oauth@ietf.org >>>>>>>>>>>> Subject: [EXTERNAL] [OAUTH-WG] OAuth 2.1: dropping password grant >>>>>>>>>>>> >>>>>>>>>>>> Hey List >>>>>>>>>>>> >>>>>>>>>>>> (Once again using the OAuth 2.1 name as a placeholder for the doc >>>>>>>>>>>> that Aaron, Torsten, and I are working on) >>>>>>>>>>>> >>>>>>>>>>>> In the security topics doc >>>>>>>>>>>> >>>>>>>>>>>> https://tools.ietf.org/html/draft-ietf-oauth-security-topics-14#section-2.4 >>>>>>>>>>>> >>>>>>>>>>>> The password grant MUST not be used. >>>>>>>>>>>> >>>>>>>>>>>> Some background for those interested. I added this grant into >>>>>>>>>>>> OAuth 2.0 to allow applications that had been provided password to >>>>>>>>>>>> migrate. Even with the caveats in OAuth 2.0, implementors decide >>>>>>>>>>>> they want to prompt the user to enter their credentials, the >>>>>>>>>>>> anti-pattern OAuth was created to eliminate. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Does anyone have concerns with dropping the password grant from >>>>>>>>>>>> the OAuth 2.1 document so that developers don't use it? >>>>>>>>>>>> >>>>>>>>>>>> /Dick >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> 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 >>>>>>>>>>> -- >>>>>>>>>>> ---- >>>>>>>>>>> Aaron Parecki >>>>>>>>>>> aaronparecki.com >>>>>>>>>>> @aaronpk >>>>>>>>>>> >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> OAuth mailing list >>>>>>>>>>> OAuth@ietf.org >>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> hans.zandb...@zmartzone.eu >>>>>>>>>>> ZmartZone IAM - www.zmartzone.eu >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> 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 >>>>>>> _______________________________________________ >>>>>>> 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 _______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth