Limboy
OAuth from First Principles - Stack Auth

Stack Auth is the open-source Auth0 alternative.

有接触过 OAuth 开发的,应该都会有这么一个疑问:这玩意儿为什么要设计得这么复杂?这篇文章描述了把这个设计的演进过程。其核心思想是假设用户的环境是不安全的,有木马或病毒可以浏览历史记录,监听网络请求,在这种情况下,OAuth 协议依然能保证安全可靠。

第 6 步的 PKCE(Proof Key for Code Exchange) 可能会有点费解,因为在这一步 OAuth Provider 要返回最终的 Access Token,这个 Token 相当于账号和密码的替代,因此在给出之前,先要确认申请方是不是最开始的 OAuth 请求发起者,而不是中间人。流程是这样的,一开始发起申请时,就给 OAuth Provider 一个 hash 过后的随机值,这个随机值只有发起者知道,木马看到这个 hash 后的随机值无法推断出原始的随机值。这个 hash 过后的随机值到了 OAuth Provider 后,会先存着,当需要返回最终的 Access Token 时,会要求发起方传入一开始的随机值,通过公开的 hash 函数 hash 后,对比两个值是否一致,是的话,说明是一开始的发起者。