SSO、单点登录、集成 CAS、OAuth2
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相关推荐
- Jeesite单点登录集成Cas另加自定义登录验证
Jeesite单点登录集成Cas另加自定义登录验证 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台. Cas主要是用来解决多应用之 ...
- 【实战】从零搭建SSO单点登录服务器 - CAS认证流程
前言 因系统逐渐增多,各个业务系统间无法共享用户状态,每个系统都需要用户登录.这对于用户来说很不友好,于是需要搭建一个SSO单点登录服务器,来做统一的登录.注销. 写这个系列的文章有两个目的: 记录自 ...
- SSO单点登录基于CAS架构封装 Memcached 实例
2019独角兽企业重金招聘Python工程师标准>>> SSO认证中心是CAS整个应用架构的一个极其重要的关键点,必须满足如下两点要求: 1.高可用,不允许程序发生故障.如果认证中心 ...
- SSO单点登录Spring-Security+CAS+使用手册.doc
csdn地址: http://download.csdn.net/download/ddbbff2005/5299315 转载于:https://blog.51cto.com/2290337/1631 ...
- SSO单点登录原理详解
本文主要对SSO单点登录与CAS.OAuth2.0两种授权协议的关系和原理进行详细说明. 1. 基础概念 术语解释 SSO-Single Sign On,单点登录 TGT-Ticket Grantin ...
- springsecurity oauth2.0 集成sso单点登录
前言 在前两篇中,我们基本上了解springsecurity 的授权码模式和密码模式的工作流程,其实来说,掌握了授权码模式,再基于springsecurity 做单点登录的集成就是一件非常容易的事情 ...
- cas跨域单点登录原理_CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- SSO单点登录和OAuth2.0的区别和理解
一.概述 SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用.流程上来说他们非常相似,但概念上又十分不同.SSO ...
- 基于CAS实现SSO单点登录
点击关注公众号,实用技术文章及时了解 1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使 ...
- CAS 5.2.x 实现SSO单点登录教程记录
CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net QQ:1056856191 Git ...
最新文章
- C++的STL 栈 实现四则运算
- sleep interrupted异常_Java高并发3中断线程以及isInterrupted与interrupted区别
- ClassNotFoundException: org.apache.catalina.loader.DevLoader 自己摸索,丰衣足食
- python官网下载步骤手机-手机python下载
- 039_JavaScript对象访问器
- Android屏幕适应详解(一)
- CentOS 5.10安装Oracle 11G R2
- ElementUI中el-select请求springboot后台数据显示下拉项并在el-table中格式化显示
- 【Presto】Cannot connect to discovery server for announce: Announcement failed with status code 404
- mysql slave_mysql master slave
- js知识梳理1:理解对象的属性特性
- 【DataOps】- 数据开发治理一体化之网易数帆数据治理2.0实践分享
- sketchup(草图大师)-倒圆角-避免破面现象
- aspect ratio - 宽高比
- 金彩教育:店铺运营怎么看数据
- mysql中1和0分别代表什么
- Solidity 生成Java类
- 10-253 B2-1查找订单数最多的员工信息
- medusa命令介绍
- 常用文献管理软件优缺点比较及总结