While not widely deployed, the OAuth2 solution to a deployment of "public clients" that need to be able to transition to "confidential clients" so that client authentication makes sense, is to use Dynamic Client Registration (RFC 7591).

Dynamic Client Registration allows the public client to register and obtain (or provide) a client secret that is unique to that instance of the app. At that point, the client can authenticate to the backend services as needed. This model increases the security of the solution and decreases the risk while also providing a stepping stone to moving away from Bearer tokens to proof-of-possession model for tokens.

General best practice is to have the public client create a public/private key pair and register the public key as part of the registration event. The client can then prove its authenticity by signing data with the private key and the backend can validate via the public key. In the case of many mobile platforms, the public/private key pair can be created in the secure enclave of the device adding additional security protection for the private key.

As for risk with the deployment mechanisms used by the API Gateways, there is really no additional risk and no additional security benefit for providing the secret in the public client. Both clients can be easily impersonated so the gateway MUST treat a client secret coming from a public client with the exact same risk measurement as a request coming from a public client without the client secret. Basically, the risk/security is the same. There may, however, be backend developer benefit by keeping the flows more similar.

Thanks,
George

On 8/25/21 9:59 AM, STAS Thibault wrote:

Dear,

I notice that many API Gateway providers are requiring the authentication of the client, even for public client types.

e.g.

https://docs.apigee.com/api-platform/security/oauth/implementing-password-grant-type <https://docs.apigee.com/api-platform/security/oauth/implementing-password-grant-type>

https://auth0.com/docs/flows/call-your-api-using-resource-owner-password-flow <https://auth0.com/docs/flows/call-your-api-using-resource-owner-password-flow>

https://tyk.io/docs/basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant/ <https://tyk.io/docs/basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant/>

Not many providers are make the use of the client authentication optional, as the client_secret is always present in either the Authorization Basic header or within the payload.

What is the added value to perform client application authentication in the context of �public� client type, like a vendor application sold to many customers�?

The client_secret would be shipped along with the application, putting at risk the secrecy of the client_secret.

The oAuth standard does not seem to provide a lot of guidance with regards to the use and need of the client authentication in such context.

Would it not be preferable to recommend client identification rather than client authentication in combination with resource-owner authentication ?

The client_id could be provided as part of the selected grant type parameters.

Kind regards,

**

*Thibault STAS *

SWIFT | Enterprise Architect � Information Technology

Tel: + 32 2 655 4975


www.swift.com <http://www.swift.com>

This e-mail and any attachments thereto may contain information which is confidential and/or proprietary and�intended for the sole use of the recipient(s) named above. If you have received this e-mail in error, please immediately notify the sender and delete the mail.� Thank you for your co-operation.� SWIFT reserves the right to retain e-mail messages on its systems and, under circumstances permitted by applicable law, to monitor and intercept e-mail messages to and from its systems.


_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to