您的位置 首页 java

Java项目实践,第三方登录与单点登录的工作原理,实现思路

第三方登录

我的理解就是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能。

遵循一个Oauth2.0国际通用协议,允许用户在不提供用户名和密码的情况下,让第三方应用访问一些资源。

使用第三方登录时,我们不需要用户再次输入用户名和密码,而是直接通过一个唯一openid来进行授权登录。

对于普通用户来说,如果能用QQ、 微信 、百度、新浪这些平台的账号一键注册登录各个平台,无疑会方便很多。对于我们的应用来说,通过授权,借助QQ、微信这些用户量比较大的第三方平台增强自己的知名度也非常划算。

Java项目实践,第三方登录与单点登录的工作原理,实现思路

我们的平台集成了QQ、微信、百度、新浪四种第三方登录方式,实现的方式都是类似的。首先去各大开放平台进行注册成为开发者,并创建应用,填写回调地址,获取appid(应用唯一的识别标志)、appkey(给应用分配的密钥);下载 api 文档和sdk开发工具包就可以开始开发了。

首先在我们网站的登录页面根据api集成第三方登录的logo图标,并给予点击事件,当用户点击此图标时,发送请求,直接跳转到第三方平台的登录页面,第三方平台也会自动检测电脑是否有已登录的账号。

登录成功以后,第三方平台会自动调用我们传递的回调地址,并传递回一个code参数;我们拿到code以后,再次调用第三方api提供的接口,传入code、app_id、appkey等参数,调用获取access_token的接口;接口调用,有第三方提供的sdk包,直接导入jar包,根据api文档,传递参数调用方法就可以,我们没必要太过关心第三方平台是用webservic接口或httpclient接口。)

获取到access_token同时,会获取到openid,拿到openid以后,就相当于拿到了登录授权。用openid去自己的用户表中查找是否与对应的用户,如果有,就直接查出用户信息,创建自己的 session 就可以了。

Java项目实践,第三方登录与单点登录的工作原理,实现思路

如果没有,则新创建一个用户,把openid放进去。如果还需要其他信息,可以通过openid再次调用第三方平台的接口获取用户信息,如果用户信息还是不够,可以创建完用户以后再次跳转一个页面,让用户不全信息。信息补全以后,创建session,完成登录。

这样一个第三方登录就完成了。

单点登录

我们的单点登录系统,主要包含了登录验证、token校验、注销、注册几大功能,单点登录系统提供了统一的登录和注册页面,提供了统一的登录token校验接口。

单点登录的主要原理就是在登录成功以后,生成一个令牌,这个令牌要求每次登录唯一不可重复,我们就简单的用了一个随机的UUID,因为我们的系统在部署时,各个模块都是通过Nginx映射到同一个一级域名下的, cookie 只要把他的作用域设置成一级域名,就可以在所有同一个一级域名下的模块中共享。生成的token做key,用户对象信息转成json 字符串 后,作为value,放到 redis 里边,都设置有效期30分钟;

然后做了一个统一校验token的接口;各个模块在自己的拦截器里边,调用此token校验接口,验证是否登录,如果返回null,则说明没有登录,拦截到统一的登录页面,并把进入拦截到的url放入cookie里边,方便登录成功以后,获取这个url,进行原路径跳转,而不是每次登录都进入首页,提供用户的体验度。

如果返回用户信息,则说明已经登录,模块创建自己的session,并放行url。统一校验token的接口的主要流程是,首先从cookie里边获取到token,然后通过token到redis里边获取用户信息。

这两个过程,任何一个失败,都直接返回null,如果成功,就把cookie和token的值从新设置一遍(这个是为了刷新有效期); 这样就实现了多个模块只需要登录一次就可以的流程。

还有就是注销,注销也是调用统一的注销接口,注销时需要首先从cookie中获取token,根据token删除redis中的用户信息,然后在删除cookie中的token。

以上,是个人总结的第三方登录与单点登录知识点,仅供参考,有不同看法,可以评论区交流。

我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。

文章来源:智云一二三科技

文章标题:Java项目实践,第三方登录与单点登录的工作原理,实现思路

文章地址:https://www.zhihuclub.com/183516.shtml

关于作者: 智云科技

热门文章

网站地图