天天看点

auth2.0

auth2.0是一种对第三方授权协议。假设用户的数据存储在服务器server上,第三方应用想要使用用户在server上的数据,一种办法就是用户直接使用sevrer的账号+密码登录第三方,然后第三方就可以直接从server上取数据了。这种做法的坏处在于需要把用户名和密码暴露给第三方,那么首先,第三方是否足够安全值得怀疑,其次第三方本身是否有安全漏洞,再者失去控制,第三方具有了随意使用用户账户的能力。这些都决定了直接使用账号+密码的方式不合理。

由此,衍生出了这里的auth协议。总体思路就是第三方需要server数据时,请求server颁发一个token,只有有了token才能访问。而这个token是否可以颁发取决于用户是否同意授权。token有时限和范围,是可控的。

实际过程并不是直接返回token的,而是第三方先拿到code,再用code申请token。

具体的过程如下:

1.用户点击第三方登录,第三方客户端发送一个请求值server认证服务器。表明自己要申请一个code/token。这里需要提供:

type:授权的方式,一般是code,即授权码模式;

appid:并不是任意的第三方都可以申请server的token,必须在server处预先注册。比如注册要申请哪些服务。毕竟server不可能随便给一个第三方授权;

callback:返回code时的重定向地址。因为发送code之前需要有用户授权的过程,所以这里并不是一个同步调用。最后server返回code时就重定向到这里传的callback回调地址。

2.重定向到第三方的callback地址时,第三方就是用code来向server申请token。这里需要提供:

code:之前申请的code;

callback:申请到token以后的重定向地址;

下面是一个小例子:

本来认证server和第三方应该是两个服务,但是这里为了方便放在了一个web项目的两个包下。

部署到tomcat下,浏览器访问:

​​http://localhost:8080​​

这里部署的context为"/",所以不需要项目名。

看到:

auth2.0

点击login by wechat。

之后显示:

auth2.0