SSO单点登录系统的实战运用

  通用介绍

  单点登录系统,简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。任何SSO框架都需要创建统一的认证中心!

  解决问题

  当我们有多个系统时,每个系统都需要做登录操作的时候,会遇到非常繁琐的问题(频繁的登录),当调用其他服务时也会出现访问不到,授权的问题,那么怎么解决此问题呢?我们就用到了SSO框架。

  框架介绍

  我们使用MaJiaSSO框架来解决单点登录问题。此框架使用非常简单,五分钟集成框架,使用JWT作为Token,不依赖任何存储,用户可以携带自定义信息,可以自定义Token加密盐。我们只需要创建一个统一的认证服务,此服务我们用来验证用户登录,并且验证获取Token。访问其他服务时,只需要带上Token就可以进行访问。我们可以使用@NoToken注解来控制放开那些不需要注解的请求映射。

  对比优点

  不依赖任何存储(大部分SSO依赖缓存/Redis/Mysql等存储)

  即插即用,五分钟集成

  Token基于JWT,用户可以自己携带信息

  用户自定义加密盐,安全便捷

扫描二维码关注公众号,回复: 6754121 查看本文章

  基于注解控制请求,简单方便

  基于拦截器,可以动态控制拦截请求(推荐拦截所有/**,使用@NoToken控制)

  认证服务器重启无影响,无缓存使用SSO框架

  建立统一认证中心

  pom引入

  

  登录请求Controller

  在这里,为了方便就不编写Sql服务,假如用户名和密码分别为admin/123456时表示认证通过。

  认证通过时,调用方法loginSuccess,传入参数(唯一ID,用户名,其他信息,自定义加密盐),判断返回状态码是不是200,如果是,直接获取data就是TOKEN值。

  @RestControllerpublic class LoginController { @RequestMapping(/login) public String login(String username, String password) { if (username.equals(admin) password.equals(123456)) { // 表示登录成功 JSONObject json = new JSONObject(); json.put(username, username); json.put(role, new ArrayListString(Arrays.asList(admin, normal))); Result loginSuccess = TokenLoginHelper.loginSuccess(1L, username, json.toJSONString(), token-salt); if (loginSuccess.getCode().equals(200)) { String token = loginSuccess.getData().toString(); System.out.println(token); return token: + token; } return 登录失败; } return failed; }}

  

认证

  到这里认证服务就集成完毕了

  普通服务集成MaJiaSSO

  对于普通服务而言,一个服务也是这样集成,两个服务也是这样集成…100个服务也是这样集成。

  注意事项:在集成时,我们需要注意设置加密盐要和授权中心一致(必须一致,一把锁必须对应它的钥匙才能打开锁)

  集成步骤:

  创建正常的SpringBoot服务

  引用Jar包

  添加拦截器

  放开不需要认证的请求集成就完毕了!!!

  pom.xml

  

  添加MaJiaSSO拦截器,并设置加密盐

  

  放开某些请求,并且获取我们保存在Token中的信息

  /hello请求是需要我们携带Token进行访问的,而/hi请求则利用注解放开了验证,代码如下

  

  访问图(不需要Token,被NoToken注解)

  

访问不需要TOKEN的服务

  需要Token未携带时访问(返回Code401),当Token不合法,会提示非法请求

  

不携带TOKEN时访问

  正常携带Token时访问,并且控制台会打印出我们携带的所有信息

  

正常携带TOKEN访问

  控制台打印携带的信息

  

控制台输出用户在TOKEN中携带的信息

  当携带错误的Token进行访问时,我们可以理解为有人恶意的攻击我们的系统,给出提示

  

恶意Token访问

  到这里我们集成MaJiaSSO就成功了,可以添加很多服务,为每个服务添加上拦截器就OK!SSO就是这么简单。

  

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/94737625