前后端分离单点登录(一种国产轻量级单点登陆解决方案)

前后端分离单点登录(一种国产轻量级单点登陆解决方案)
一种国产轻量级单点登陆解决方案

前言

市场上主流的单点登陆解决方案有以下几种:

  1. SpringSecurity + OAuth2
  2. SpringSecurity + CAS 功能较弱,对前后端分离的项目支持不是很好
  3. Shiro + CAS
  4. JWT 可以自定义需求,灵活扩展鉴权方式

今天介绍一个国产轻量级单点登陆解决方案XXL-SSO XXL-SSO是一个分布式单点登录框架,只需要登录一次就可以访问所有相互信任的应用系统。 拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性。现已开放源代码,开箱即用。

源码说明

仓库地址

https://github.com/xuxueli/xxl-sso

https://gitee.com/xuxueli0323/xxl-sso

运行环境

  • JDK:1.7+
  • Redis:4.0+

源码结构

- xxl-sso-server:中央认证服务,支持集群- xxl-sso-core:Client端依赖- xxl-sso-samples:单点登陆Client端接入示例项目    - xxl-sso-web-sample-springboot:基于Cookie接入方式,供用户浏览器访问,springboot版本    - xxl-sso-token-sample-springboot:基于Token接入方式,常用于无法使用Cookie的场景使用,如APP、Cookie被禁用等,springboot版本

部署认证中心

配置文件:application.properties

xxl.sso.redis.address=redis://127.0.0.1:6379xxl.sso.redis.expire.minute=1440

先启动redis,再启动认证中心。

可打开CAS登陆地址。

部署客户端-以web方式

配置文件:application.properties

server.port=8081server.servlet.context-path=/xxl-sso-web-sample-springboot### xxl-ssoxxl.sso.server=http://127.0.0.1:8080/xxl-sso-serverxxl.sso.logout.path=/logoutxxl-sso.excluded.paths=xxl.sso.redis.address=redis://127.0.0.1:6379

启动成功

访问:http://127.0.0.1:8081/xxl-sso-web-sample-springboot 自动跳转至

http://127.0.0.1:8080/xxl-sso-server/login?redirect_url=http://127.0.0.1:8081/xxl-sso-web-sample-springboot/

实现了对客户端未登陆用户验证。这里我们登陆,方便其它客户端登陆路过验证。

部署第二个WEB客户端

上面客户端jar复制一份,配置文件修改以下部分

server.port=8082server.servlet.context-path=/xxl-sso-web-sample-springboot

启动

访问:http://127.0.0.1:8082/xxl-sso-web-sample-springboot

实现了单点登陆,是不是很简单?

登陆和注销流程

正常情况下,登录流程如下:

1、访问 "Client01应用地址" ,将会自动 redirect 到 "SSO认证中心地址" 登录界面。

2、成功登录后,将会自动 redirect 返回到 "Client01应用地址",并切换为已登录状态。

3、此时,访问 "Client02应用地址",不需登陆将会自动切换为已登录状态。

正常情况下,注销流程如下:

1、访问 "Client01应用地址" 配置的 "注销登陆path",将会自动 redirect 到 "SSO认证中心地址" 并自动注销登陆状态。

2、此时,访问 "Client02应用地址",也将会自动注销登陆状态。

部署客户端-以Token方式

论证中心部署方式与上面一样,搭建成功后,默认为Token方式登陆提供以下API接口:

  • 1、登陆接口:/app/login
  • 2、注销接口:/app/logout
  • 3、登陆状态校验接口:/app/logincheck

登陆和注销流程

正常情况下,登录流程如下:

前后端分离单点登录(一种国产轻量级单点登陆解决方案)

1、获取用户输入的账号密码后,请求SSO Server的登录接口,获取用户 sso sessionid ;(参考代码:TokenClientTest.loginTest) 。

2、登陆成功后,获取到 sso sessionid,需要主动存储,后续请求时需要设置在 Header参数中。

3、此时,使用 sso sessionid 访问受保护的 "Client01应用" 和 "Client02应用" 提供的接口,接口均正常返回(参考代码:TokenClientTest.clientApiRequestTest) 。


正常情况下,注销流程如下:

1、请求SSO Server的注销接口,注销登陆凭证 sso sessionid ;(参考代码:TokenClientTest.logoutTest)。

2、注销成功后,sso sessionid 将会全局失效。

3、此时,使用 sso sessionid 访问受保护的 "Client01应用" 和 "Client02应用" 提供的接口,接口请求将会被拦截,提示未登录并返回状态码 501(参考代码:TokenClientTest.clientApiRequestTest)。

每天一个小知识,每天进步一点点!!![加油][加油][加油]





文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章