两次请求,第一次是跳转到第三方并登录以得到access code,第二次是发送请求并携带access code以得到access token。为啥要设计成两次请求,可以参考这篇1,大意是解决access token被滥用的可能,因为第二次请求可能会携带ip、设备名、app名、access code来生成唯一的access token。为啥不在第一次请求时携带上这些信息,文章说可能是为了清晰,我觉得应该也为了省内存吧,如果第一次请求时用户名密码错误,携带那些信息就会占用提供OAuth2服务的服务端内存,没有必要。
这篇2感觉是补充,因为返回access code是通过回调,回调的第三方url可能是http的,直接返回access token存在安全问题。oauth2的服务器本身都是走https。
从本人工作中的使用来总结,access code会随第三方登录成功后的回调返回到浏览器,服务端处理该回调请求时会拿access code在服务端发起http请求到第三方换取access token,换取时需要携带服务端appId、secret等敏感信息,如果一次请求就能搞定那意味着浏览器发出的第三方请求里需要带上这些敏感信息,显然不如服务端发出更安全。
另外,附上一个和chatGpt聊天的截图,设计前后端+第三方认证的请求流时可考虑进来这个细节。
【OAuth2】access code与access token的区别
于 2021-06-17 19:25:16 首次发布