SSO、单点登录、集成 CAS、OAuth2

JeeSite 已经默认集成了两种单点登录方式(Single Sign On):

1、SSO(简单登录)接口,实现快速登录系统。

2、与 Apereo CAS 服务器集成,快速实现系统登录(个人版)

并实现了第三方登录 OAuth2,如:微信、QQ、支付宝、等等

简单登录接口

系统登录:

1、设置 application.yml(v4.0.x:jeesite.yml)的 shiro.sso.secretKey 快速登录安全Key,若不设置将无法使用该接口。

shiro:# 简单 SSO 登录相关配置sso:# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。secretKey: thinkgem# 是否加密单点登录安全KeyencryptKey: true

2、举例调用地址如下,调用完成后自动登录系统:

http://localhost/project/sso/{username}/{token}?url=/sys/user/list?p1=v1%26p2=v2&relogin=true
  • username: 登录名,数据库中的 login_code 字段。
  • token: 登录令牌,根据yml里配置的登录安全Key生产的密码。
  • url: 登录之后要跳转的地址,如果url中携带参数,请使用转义字符,如“&”号,使用“%26”转义。

token生成方式:

String username = "system"; // 登录系统名
String secretKey = "thinkgem"; // yml 中设置的 shiro.sso.secretKey 参数值。
String token = Md5Utils.md5(secretKey + username + DateUtils.getDate("yyyyMMdd"));// 如果 shiro.sso.encryptKey 为 true,则 secretKey 会自动加密。
// 如果在本系统获取,则 secretKey 已经加密了,也可以通过下面这个简便方法获取。
String token = UserUtils.getSsoToken(username);

该接口源码如下(提供参考):

/*** 单点登录(如已经登录,则直接跳转)* @param username    登录用户名(loginCode)* @param token   单点登录令牌,令牌组成:sso密钥+用户名+日期,进行md5加密,举例: *         // 注意如果 shiro.sso.encryptKey 为 true,则 secretKey 会自动加密。*      String secretKey = Global.getConfig("shiro.sso.secretKey");*         String token = Md5Utils.md5(secretKey + username + DateUtils.getDate("yyyyMMdd"));* @param params     登录附加参数(JSON格式),或 param_ 前缀的请求参数。* @param url      登录成功后跳转的url地址。* @param relogin     是否强制重新登录,需要强制重新登录传递true*/
@RequestMapping(value = "sso/{username}/{token}")
public String sso(@PathVariable String username, @PathVariable String token,@RequestParam(defaultValue="${adminPath}") String url, String relogin,HttpServletRequest request, Model model){User user = UserUtils.getUser();// 如果已经登录,并且是同一个人,并且不强制重新登录,则直接跳转到目标页if(StringUtils.isNotBlank(user.getUserCode())&& StringUtils.equals(user.getLoginCode(), username)&& !ObjectUtils.toBoolean(relogin)){return REDIRECT + EncodeUtils.decodeUrl2(url);}// 通过令牌登录系统if (token != null){try {FormToken upToken = new FormToken();upToken.setUsername(username);    // 登录用户名upToken.setSsoToken(token);     // 单点登录令牌upToken.setParams(ServletUtils.getExtParams(request)); // 登录附加参数UserUtils.getSubject().login(upToken);return REDIRECT + EncodeUtils.decodeUrl2(url);} catch (AuthenticationException e) {if (!e.getMessage().startsWith("msg:")){throw new AuthenticationException("msg:登录失败,请联系管理员。", e);}throw e;}}return "error/403";
}

无条件登录接口:

一般用于第三方身份认证完成后,内部调用的登录接口。

1、设置 application.yml(v4.0.x:jeesite.yml)的 shiro.sso.secretKey 快速登录安全Key:

shiro:# 简单 SSO 登录相关配置sso:# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。secretKey: thinkgem# 是否加密单点登录安全KeyencryptKey: true

2、调用登录方法

try {String username = "admin";FormToken upToken = new FormToken();upToken.setUsername(username);upToken.setSsoToken(UserUtils.getSsoToken(username));//upToken.setParams(ServletUtils.getExtParams(request));UserUtils.getSubject().login(upToken);String sid = UserUtils.getSession().getId().toString();System.out.println("登录成功,__sid=" + sid);
} catch (AuthenticationException e) {if (!e.getMessage().startsWith("msg:")){throw new AuthenticationException("msg:登录失败,请联系管理员。", e);}throw e; // 登录失败,抛出异常
}

系统退出:

http://127.0.0.1:8980/js/a/logout?__ajax=json&__sid=5fe9c7c45ded4425b03eff8f78179637

注意:无 cookie 环境下,必须要指定要退出的 sessionid

返回JSON数据:

{"result":"true","message":"退出成功!"}

集成 Apereo CAS

CAS 客户端配置非常简单,开启如下配置,设置好服务于客户端跳转地址即可:

shiro:#索引页路径defaultPath: ${shiro.loginUrl}# Apereo CAS 相关配置(个人版)casServerUrl: http://127.0.0.1:8981/cascasClientUrl: http://127.0.0.1:8980/jsloginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-caslogoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}successUrl: ${shiro.casClientUrl}${adminPath}/index

注意此功能是个人版功能,只有个人版以上版本才能使用。

OAuth2 第三方登录

集成史上最全的第三方登录的开源库 JustAuth。目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、企业微信、酷家乐、Gitlab、美团、饿了么和推特等第三方平台的授权登录。

该模块提供完善的通用接口扩展,若上述没说到的,也可以自己方便扩展。

集成第三方登录模块

1、打开 web 的 pom.xml,加入如下模块依赖代码

<!-- 第三方账号登录 -->
<dependency><groupId>com.jeesite</groupId><artifactId>jeesite-module-oauth2</artifactId><version>${project.parent.version}</version>
</dependency>

注意:此模块源代码,请向售后服务索取。

2、配置参数:


# 第三方系统认证
oauth2:gitee:clientId: xxxxxxclientSecret: xxxxxxredirectUri: http://127.0.0.1:8980/js/oauth2/callback/giteeqq:clientId: xxxxxxclientSecret: xxxxxxredirectUri: http://127.0.0.1:8980/js/oauth2/callback/qqweixin:clientId: xxxxxxclientSecret: xxxxxxredirectUri: http://127.0.0.1:8980/js/oauth2/callback/weixin

上述等等,不一一列举,具体可以打开 Oauth2UserService 的 getAuthRequest 方法查看并扩展

系统登录地址:

地址格式:
http://127.0.0.1:8980/js/oauth2/login/第三方唯一标识举例如下:
Gitee登录:http://127.0.0.1:8980/js/oauth2/login/gitee
QQ账号登录:http://127.0.0.1:8980/js/oauth2/login/qq
微信账号登录:http://127.0.0.1:8980/js/oauth2/login/weixin

授权回调地址:

地址格式:
http://127.0.0.1:8980/js/oauth2/callback/第三方唯一标识举例如下:
Gitee登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/gitee
QQ账号登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/qq
微信账号登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/weixin

SSO、单点登录、集成 CAS、OAuth2相关推荐

  1. Jeesite单点登录集成Cas另加自定义登录验证

    Jeesite单点登录集成Cas另加自定义登录验证 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台. Cas主要是用来解决多应用之 ...

  2. 【实战】从零搭建SSO单点登录服务器 - CAS认证流程

    前言 因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录.这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录.注销. 写这个系列的文章有两个目的: 记录自 ...

  3. SSO单点登录基于CAS架构封装 Memcached 实例

    2019独角兽企业重金招聘Python工程师标准>>> SSO认证中心是CAS整个应用架构的一个极其重要的关键点,必须满足如下两点要求: 1.高可用,不允许程序发生故障.如果认证中心 ...

  4. SSO单点登录Spring-Security+CAS+使用手册.doc

    csdn地址: http://download.csdn.net/download/ddbbff2005/5299315 转载于:https://blog.51cto.com/2290337/1631 ...

  5. SSO单点登录原理详解

    本文主要对SSO单点登录与CAS.OAuth2.0两种授权协议的关系和原理进行详细说明. 1. 基础概念 术语解释 SSO-Single Sign On,单点登录 TGT-Ticket Grantin ...

  6. springsecurity oauth2.0 集成sso单点登录

    前言 在前两篇中,我们基本上了解springsecurity 的授权码模式和密码模式的工作流程,其实来说,掌握了授权码模式,再基于springsecurity 做单点登录的集成就是一件非常容易的事情 ...

  7. cas跨域单点登录原理_CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  8. SSO单点登录和OAuth2.0的区别和理解

    一.概述 SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用.流程上来说他们非常相似,但概念上又十分不同.SSO ...

  9. 基于CAS实现SSO单点登录

    点击关注公众号,实用技术文章及时了解 1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使 ...

  10. CAS 5.2.x 实现SSO单点登录教程记录

    CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net QQ:1056856191 Git ...

最新文章

  1. C++的STL 栈 实现四则运算
  2. sleep interrupted异常_Java高并发3中断线程以及isInterrupted与interrupted区别
  3. ClassNotFoundException: org.apache.catalina.loader.DevLoader 自己摸索,丰衣足食
  4. python官网下载步骤手机-手机python下载
  5. 039_JavaScript对象访问器
  6. Android屏幕适应详解(一)
  7. CentOS 5.10安装Oracle 11G R2
  8. ElementUI中el-select请求springboot后台数据显示下拉项并在el-table中格式化显示
  9. 【Presto】Cannot connect to discovery server for announce: Announcement failed with status code 404
  10. mysql slave_mysql master slave
  11. js知识梳理1:理解对象的属性特性
  12. 【DataOps】- 数据开发治理一体化之网易数帆数据治理2.0实践分享
  13. sketchup(草图大师)-倒圆角-避免破面现象
  14. aspect ratio - 宽高比
  15. 金彩教育:店铺运营怎么看数据
  16. mysql中1和0分别代表什么
  17. Solidity 生成Java类
  18. 10-253 B2-1查找订单数最多的员工信息
  19. medusa命令介绍
  20. 常用文献管理软件优缺点比较及总结

热门文章

  1. ps转手绘课程微笑嘴巴和头发绘制——day 06、 07学习笔记
  2. 项目六 MAIL服务器配置
  3. 集成电路工程专业英语
  4. 测试之路 pytest接口自动化框架扩展-GUI窗口
  5. sysbench 压测
  6. Java小型图形界面设计(银行卡类)
  7. 收发一体超声波测距离传感器模块_超声波模块HC-SR04简介以及编程
  8. javascript:时间戳转换为日期时间
  9. 数码管显示驱动芯片 CH450
  10. 干货 | 跨多业务线挑战下,携程订单索引服务的1.0到2.0