Discussion about this post

User's avatar
Michael Schwartz's avatar

"Storing secrets securely is difficult or impossible" -- your assumption is incorrect--it's not impossible. "Difficult"... what does that even mean? Anything unfamiliar is "difficult"--but OAuth is not rocket science.

Note: I'm not arguing against the use of PKCE. It's good security hygiene. In some ways, it's complimentary to checking the "state" in OAuth, or the "nonce" in an id_token. For example, the nonce in an id_token is verified by the client to make sure the response is bound to a specific authn request. PKCE is used by the server to ensure the token request comes from the same client that started the flow. This is all good stuff.

But don't fall into the trap of thinking that PKCE in any way abolves you from cryptographically identifying the client, and the benefits that accrue when you do so. For example, in your audit log, do you want to say "a client" or "this specific client" performed an action on a resource?

The fact that we can't centrally generate a shared secret (e.g. client_id + client_secret) or a private key on the server is correct. But there are certainly lots of other cases where we face the same challenge and find a solution to enable a client to avoid shared secrets.

Ultimately, what you are doing is passing on the trust model for security. This is the same mistake that got us in the bad security situation we are in today.

Expand full comment
4 more comments...

No posts