基于SAML2.0单点登录的实现(JAVA)
一、实现流程
二、git中下载sp程序,部署服务,并调试,确保与idp可以通信。
1、下载地址
https://github.com/vdenotaris/spring-boot-security-saml-sample
2、配置证书,修改 \src\main\resources\update-certifcate.sh,并运行,会根据配置生成jks证书。解决SSL peer failed hostname validation for name: null错误
注:update-certifcate.sh解释:从IDP_HOST、IDP_PORT的地址获取证书存入临时ssocircle.cert中,根据ssocircle.cert生成samlKeystore.jks文件。
如果自己有cert证书,请修改update-certifcate.sh 根据自己的cert证书生成 jks。
3、修改WebSecurityConfig.java
String idpSSOCircleMetadataURL = "自己idp地址"; //指向 federationmetadata.xml
HTTPMetadataProvider httpMetadataProvider = new HTTPMetadataProvider(this.backgroundTaskTimer, httpClient(), idpSSOCircleMetadataURL);
extendedMetadataDelegate.setMetadataTrustCheck(false); // 不改成false好像不能过
4、部署并启动
5、访问 http://localhost:8080/saml/metadata 下载 spring_saml_metadata.xml,并在idp中进行配置。(通信需要)。
6、修改LandingController方法
@RequestMapping("/landing")public String landing(@CurrentUser User user, Model model,HttpServletRequest request) { String userName = user.getUsername(); String token = UUID.randomUUID().toString();ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();valueOperations.set(token, userName,2,TimeUnit.MINUTES);System.out.println("-------------------"+userName+"---------------------------------");return "redirect:https://xxx/esp/index.html#app/singleview?token="+token;//return "redirect:"+redirectUrl+"?token="+token;}
7、修改js文件
var token = $location.search().token || "";
UserService.findCurrentUserInfo(token).success(function(data){//获取当前用户后执行的方法
})
8、修改后端方法(因为系统判断是否登录都走findCurrentUserInfo方法,故修改这个方法。主要实现根据token,如果能取到用户名则从数据库中取出用户信息,放入Session中)
@RequestMapping(value = "/findCurrentUserInfo", method = RequestMethod.GET)public AjaxResponse findCurrentUserInfo(HttpServletRequest request,String token) throws Exception {if(!StringUtils.isEmpty(token)) {ValueOperations<String, String> valueOperations = ssoTokenRedisTemplate.opsForValue(); String userName = valueOperations.get(token);if(!StringUtils.isEmpty(userName)) { if(userName.indexOf("@")>0) {userName = userName.split("@")[0];} User sysUser = iSysUserRepository.findByUserName(userName);if(sysUser == null) {throw new BusinessException("UserNotExist","用户不存在!");}RequestAttributes attrs = RequestContextHolder.getRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes)attrs).getRequest(); request.getHttpSession().setAttribute(name, item);.setItem("SysUser", sysUser); } return rps;}
三、总结
1、调试通过spring-boot-security-saml-sample这个sp服务,并且与idp实现通信。主要涉及到https证书,我在这个上面绕了好长时间。
2、spring-boot-security-saml-sample需要部署成一个服务,不需要和我们的程序绑到一起,它的主要作用就是我们请求idp,idp给它返回用户名。我们从它那里获取用户名。
3、我们自己的程序需要有统一判断是否登录的入口,这样比较好改。
基于SAML2.0单点登录的实现(JAVA)相关推荐
- 基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例
目录 现状和问题 解决方案原理 基于saml2.0协议的Java实现 基于OKTA平台的实例演示 结论 题外话 现状和问题 事情的起因在于接到一个需求,要求在SAP的succesfactory中使用单 ...
- 【No.1】基于Cookie的单点登录(SSO)
2019独角兽企业重金招聘Python工程师标准>>> 这篇主要说明基于Cookie的单点登录实现,以及Cookie的一些特性以及使用说明. 1.Cookie是什么,如何工作的 在程 ...
- 基于SAML的单点登录介绍
一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain ...
- 2、cas4.0 单点登录 之 cas-client
cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书 已经做好了证书的准备工作,现在结合cas-server来配置单点登录: 一.安装cas服务端(cas-se ...
- 基于.Net的单点登录(SSO)解决方案
基于.Net的单点登录(SSO)解决方案 前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助. ...
- java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...
- 基于Cookie的单点登录(SSO)系统介绍
基于Cookie的单点登录(SSO)系统介绍 SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分.SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保 ...
- 1、cas4.0 单点登录 之 https证书
cas4.0 单点登录 之 https证书 公司项目使用分布式部署,使用单点登录可使各节点无状态,达到业务与用户认证解耦:cas-server与cas-client通讯安全完全基于https,需要ss ...
- Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心...
基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...
最新文章
- JVM中线程是否可以并行执行
- 纯注解开发配置spring
- pythontuple数据类型_数据类型-元组Tuple
- MyBatis 的执行流程,学废了!
- python捷联惯导的姿态解算_自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用...
- Feature flag,一个让软件发布轻松不掉发的神技
- Qt-做一个快速打包插件(一键完成项目软件打包)
- linux 下恢复文件权限设置,备份和恢复Linux文件权限的方法
- MyEclipse+Tomcat+JSP开发环境配置
- js中如何判断按钮是否被点击了
- linux 查看pgsql端口,如何通过Linux脚本检查是否已安装PostgreSQL?
- CentOS7安装单机kubernetes和Docker
- 硬件开发过程简介(一)
- 移动设备数据丢失恢复办法
- 统计学习——联合概率分布
- 桌面计算机图标无法显示属性,Win7系统桌面图标显示异常的解决方法大全
- 此CA证书不受信任的解决办法
- 创成汇:科技与艺术概念结合在手机上,效果居然这么强?_创成汇
- 【学习分享】0、创龙 TMS320C6748开发例程使用手册
- 强力推荐mac快速查看应用快捷键工具:键指如飞FlyKey
热门文章
- aic值检验 p值_qRT-PCR差异分析及P值计算
- 银行计算机综合知识,银行秋招综合知识测试包含哪些专业课?
- JAVA计算机毕业设计中药分类管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
- python微信加人_真的有专门给微信加人的软件吗?
- 组态王JAVA,组态王肿么实现点击按钮以后可以实现画面的运行
- 服务器amd cpu性能排行,Ryzen处理器有哪些/性能排名如何?AMD Ryzen CPU天梯图解答...
- 最小二乘法曲线拟合(代码环境:matlab)
- echarts label固定位置_echarts 饼状图调节 label和labelLine的位置
- 【网络】解决校园网Wi-Fi登录页无法自动弹出
- 基于原语的千兆以太网RGMII接口设计