首先明确我们要实现的目标:一个云端的用户系统,这个云平台上所有的第三方应用均借助这个用户系统进行登录鉴权。
实现场景:用户在其中一个第三方应用上授权登录完毕,那么其他的第三方应用识别这个用户已经登录,然后所有的第三方应用都可以调用api来操作与这个用户有关的受保护资源。
用户在一台物理电脑上授权,在另外一台物理电脑上无法认为这个用户已经登录。同台电脑换个浏览器也不能登录。
每个第三方应用都要有的信息:
1、客户端id(可公开)
2、客户端secret_key(不可公开)
3、回跳url(否则服务端会被作为免费公开的跳转节点)
客户端根据【客户端id和用户的授权(用户名密码)】来获取授权码,这个授权码有效期一般一个小时,只能用一次。
客户端用【客户端secret key和授权码】获取access_token
(说明:https方式带着secret key请求),获得的access_token不被别人盗取最好,即使被盗取了也没事。用【secert key+调用api时候的参数,字典排序后,做md5(服务端有你的secret key,验证计算量很小)】直接就可以用http进行调用,不需要https。
我们的实现:拿到acces_token是通过服务器写cookie的方式,这样就不用多一步授权码的过程。因为我们的目标是单点登录多点共用!
一个问题,黑客得到一个用户的access_token,然后用其他电脑登录盗取信息!
解决办法:secret key加密api
单点注销在我们这个系统下,可以直接告诉服务器把那个access_token当下失效(删除)就可以。