开发者学堂课程【Spring Security知识精讲与实战演示(四):OAuth2.0四种模式说明】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/733/detail/13077
OAuth2.0四种模式说明
内容介绍:
一、 授权码模式
二、 简化模式
三、 密码模式
四、 客户端模式
四种授权方式。为了能说清楚这四种授权方式分别都是怎样的流程?如下图,对着这张图来进行说明。
一、授权码模式
用户想让a系统直接打a系统印在b系统上的照片,来访问a系统,准备去打印b系统照片时,a系统会把用户指向另外一个界面,为用户是否允许a系统去操作b系统,需要注意是a系统问用户是否自己可以操作b系统?而不是用户去操作b系统,因为用户本就可以操作,是问要不要给a系统权限,让a系统去操作技能。用户可以有两个选择,第一同意,第二拒绝。一般都说同意,拒绝就自己下照片自己做,同意统一操作b系统,就意味着a系统想拿b系统的资源,前提条件是用户自身在b系统上有操作权限,如果用户都没有在b系统上的操作权限,想让a系统操作是不可能的,这时一般情况下就会提示用户去登录b系统,例如在实际生活中用到的第三方登录。
打开一个网站,网站a系统,用微信登录,微信是b系统,用微信登录的时候只要提示,要不要用微信登录?可以,微信已经是登录的状态,就可以直接给授权。但要注意,如果微信没有登录,必须要先登录微信才可以进行后续。
如果说a系统被允许操作b系统,那么只要给予权限,b系统会提示要登录,接下来登录b系统后,b系统就会给a系统来一个回调,给一个授权码。这就是这一个模式的一个精粹。授权码给a系统后证明就可以操作b系统,在a系统是客户端的一个交互。接下来a系统拿到授权码,在a系统的服务器端要向b系统发一次请求。b系统给a系统生成通行的令牌,授权码跟token不是一回事。授权码只说明b系统同意让a系统进行操作,给一个授权码,这个a系统不能真正去操作,要真正想去操作b系统,去操作b系统时,必须带上一个通行的令牌token,而这个令牌是需要通过授权码去生成。要拿着授权码在这里得到通行的令牌。得到令牌后,再去用b系统时,拿着令牌过去就可以,这就是授权码模式。
具体步骤。
第一步:【A服务客户端】将用户自动导航到【B服务认证服务】。这一步用户需要提供一个回调地址,以备【B服务认证服务】返回授权码使用。如果不给回调地址,就得不到授权码。这就是回调地址。
第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也就是说用户要事先具有B服务的使用权限。
第三步:【B服务认证服务】生成授权码,授权码将通过第一步提供的回调地址,返回给【A服务客户端】。注意这个授权码并非通行【B服务资源服务】的通行凭证。
第四步:【A服务认证服务】携带上一步得到的授权码向【B服务认证服务】发送请求,获取通行凭证token.
第五步:【B服务认证服务】给【A服务认证服务】返回令牌token和更新令牌refresh token.·使用场景,第五步:去访问时,b系统服务可以直接让a系统服务去访问,这时b系统会返回一个token,一个更新token。访问的令牌,当然令牌时间很短,有可能过期,过期之后,可以再访问刷新token,不需要再拿授权码,当然授权码只能用一次。一次之后就再也不能使用,但后面再想拿到图片,只能通过发新图改,这就是授权码模式。
二、简化模式
简化模式跟授权码模式比非常简单,它简化了授权码模式。在这上面一直说有个叫授权码的东西,授权码是在客户端生成的,简而言之,上图就通过客户端给授权码,授权码是暴露在页面上。所以不安全,因为授权码并不能直接访问b系统,授权码要经过服务器再生成token才能访问,所以暴露无所谓,但简化模式不安全,可以不要授权。简化模式不要授权码,这里根本没有授权码,简而言之,可以直接在客户端向b系统的服务器发请求得到所有通行的token,可以直接去访问,所以不推荐使用简化模式,因为简化模式会将保卫b系统的通行令牌暴露在浏览器,这种方式是不安全的。但是也有公司会这样用。推荐大家使用授权码模式。
三、密码模式
密码模式,以图为例,想让a系统访问b系统,把个人的用户名和密码告诉它,a系统的用户名和密码,是b系统的用户名和密码。换言之,用户有两个系统,一个是a系统,一个是b系统,一个第三方网站,一个是VIP,要把账号和密码告诉网站,这更不安全,所以这时需要网站a系统进度非常高才能使用,否则把另外一个软件的账号和密码都告诉它,这可能对个人隐私不是很好的事情,如果b系统是一个无关要紧的系统,无所谓,这是一种方式。
四、 客户端模式
客户端模式不属于OAuth2.0的范畴,a系统,b系统,都是用户可以访问的系统,用户都可以访问他俩,用户有授权说a系统以后可以直接访问b系统,因为这是用户自己来,也可以访问,但是客户端模式就是用户只能访问a系统,根本就不知道b系统,完全不知道b系统的存在,而a系统要用b系统,那a系统直接去找b系统,换言之,这时其实是两个不相关系统之间的一个交互,跟用户没有关系,用户访问a系统找资源,但是去哪个地方找资源并不知道,就是b系统的资源是a系统要用,而不是用户要用。所以说第四种方式一般情况下不再认为它是OAuth2.0的一个范畴.
以上说明这四种模式分别是什么,这里有点抽象,这是正常的,因为流程确实很复杂,需要写完代码后再来看这四个模式,可能会更清晰,这四种模式可以暂时先做一个了解。