springbootSpring cloud

shiro oauth2.0 鉴权

2018-06-06  本文已影响583人  bigpeng个人博客
  1. 什么是oauth2.0
    OAuth简单说就是一种授权的协议,是一种开放的授权标准。允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息。 只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。

2.oauth2.0授权常见的例子
比如你登录简书,但是你没有注册简书账号,这个时候呢,你可以选择 使用QQ登录,或者微信登录等方式。


登录.png

点击QQ登录,会跳转到QQ的登录页面。


QQ授权.png

输入账号密码,并选择授权信息之后,你就可以登录简书了。而不需要注册简书的账号,使用QQ账号便完成了次操作。

   登录成功.png
  1. oauth2.0涉及到的几个主要概念
  1. oauth2.0认证的流程
    大致流程如下图所示:


    oauth2.0大致流程.png

上面讲的例子的详细步骤(此图为盗取):


oauth2.0授权详细示例图.png

步骤讲解:


存在的一些疑问?
1、为什么要用oauth,而不直接用用户名密码登录。
如果直接用用户名密码,那么你的账号密码就直接暴露给了第三方应用。这是不安全的,你没法控制第三方应用的权限,和使用时间等,你没有办法收回权限,除非你改密码。
就比如现在的装修,你就是资源拥有者,而房子就是你的QQ资源,房门就可以 理解为QQ授权服务器。
你不会直接把你家正式的钥匙(用户名,密码)给装修队,要不然他复制一份,不就可以随时进入你家了(资源),你会使用装修钥匙(token),装修钥匙在你启用正式钥匙后就会失效(取消授权),这就是跟oauth的原理类似的。

2、回调地址验证
必须验证回调地址。第三方应用在注册授权的时候,需要录入回调地址,然后QQ会生成clientId,密码给第三方应用。 在请求授权码时会去验证回调地址是否相同。

3、授权码code 只能使用一次

4、为什么请求授权码的时候只传了clientid ,而拿到授权码code之后,客户端会把授权码code,clientid,和秘钥一起传给服务器?
答:获取授权码时,请求是用户发起的,然后客户端重定向到服务器发起请求,对应的cllientid ,回调地址都是可见的。这个时候不能传递密码。服务器端只验证clientid,初步验证客户端(我是客户端)。而得到授权码之后,客户端后台请求服务器,传递clientid,code,秘钥,这个是验证是否是正确的客户端身份(我真的是客户端)。
后台发起的请求,相对安全。

上一篇 下一篇

猜你喜欢

热点阅读