一直以来都有一个疑问: 为什么 OAuth2.0,要先请求获得授权码,再用授权码换取 Access Token 呢。为什么不在客户端将浏览器引导至授权服务器让用户授权之后,直接返回访问 Access Token 呢?
求解释。
基于浏览器的 OAuth 2.0,是浏览器引导至授权服务器,授权服务器通过 redirect to 的方式将 auth code 返回,然后服务器用 auth code 去授权服务器换取 access token。
这里面关键在于 auth code 通过浏览器端(必须走 https)获取的,而 access token 的获取必须通过后台服务器,这里主要是安全考虑。直接通过浏览器获取 access token 是不安全的,因为浏览器端是不受控的,存在很大的被入侵和攻击风险,所以获取 access token 这步必须在服务器后端通过服务器对服务器的方式获取,获取的过程中利用前一步的 auth code + 请求发起服务器信息等组合的方式确保请求合法以及规避 fake 请求的风险。
#1 楼 @lgn21st 明白了!还有一个问题想问你:因为我现在想为一个保护资源(加密存储的)添加认证授权系统。再使用 Access Token 获取保护资源时,是在保护资源那边先解密再传送回客户端,还是传送回加密后的内容在客户端本地解密。这两种方案我有些纠结。你能提些意见么?
客户端使用 Access Token 获取保护资源的过程,也是通过客户端的后台服务器对服务器实现的吧。那么在后台服务器对服务器交互的过程中,可以考虑的安全风险有什么呢?
#3 楼 @zhangyuxiu 如果所有的数据传输都是在后台,且传输过程本身全部走 HTTPS 就没有问题了。