oauth流程:
- oauth2授权码模式流程,用微信登录举例子,用户点击微信重定向到微信授权页面,点击同意,微信吧code值重定向给前端页面。前端页面把code值传给后台,后台获取token,获取用户信息响应给前端
- 为什么要有code值呢?不用code行不行?不用code也行,不用code的流程应该是用户点击同意之后微信把token给前端或者后台,如果给前端token暴露在前端会泄露。给后台是可以的,后台获取到用户信息之后,怎么返回给前端呢?此时是微信和后台建立的长连接,并不是我们的前端和我们的后台长连接,我们后台无法给前端任何响应。那么就需要后台主动发请求给前端才能把我们的用户信息给前端,这就需要用的websocket技术了。这样是可以实现不用code,也可以安全的把token生成传递给客户端。 可是我们知道使用websocket技术只是类似于IM即时通讯之类的应用才会用的,大多数公司不会使用这个技术。因为一个点就使用一个新的技术是完全不值得的,增加系统复杂程度。如果oauth2流程这样去设计那么就无法做到通用,无法让很多人满意了,无法做到通用。 因此不能直接把token给后台,需要给前端。可是前端给token不安全,那就需要给前端一个中间的值,这个中间的值就是code。前端拿到code值给请求后台,后台最后响应给前端微信用户的信息。这样就不需要websocket了。 那code值给前端就安全吗?code值给到前端code值会泄露,但是不代表token会泄露,code值的防护做好了会保证token不泄露。