- 联合身份验证:许多企业需要与其他企业共享资源,例如供应链合作伙伴和客户。使用单点登录技术,这些企业可以实现联合身份验证,从而提高安全性和便利性。
五、单点登录的安全性考虑
单点登录技术可以提高安全性,但也需要考虑一些安全性问题,例如:
-
身份提供者的安全性:身份提供者可能成为攻击者的目标,因为它存储了用户的身份验证信息。因此,身份提供者必须采取适当的安全措施,例如加密和访问控制,以保护用户的身份验证信息。
-
令牌的安全性:令牌可能被攻击者窃取或篡改。因此,令牌必须采取一定的安全措施来保护其安全性,例如加密、签名、防伪标记等。此外,令牌的使用也需要遵循一定的安全规范,例如不要在不安全的网络环境下使用令牌,不要将令牌泄露给他人等。如果令牌被窃取或篡改,应及时采取措施,例如撤销令牌、更改密码等,以保护用户的安全。
以下是单点登录的认证过程:
- 用户访问应用A,应用A检测到用户未登录,将用户重定向到认证中心。
- 用户在认证中心输入用户名和密码进行认证。
- 认证中心验证用户身份,如果验证通过,生成一个令牌(Token)。
- 认证中心将令牌返回给应用A。
- 应用A将令牌发送给应用B。
- 应用B将令牌发送给认证中心进行验证。
- 认证中心验证令牌,如果验证通过,返回一个授权令牌(Access Token)。
- 应用B使用授权令牌访问认证中心获取用户信息。
- 认证中心返回用户信息给应用B。
- 应用B使用用户信息完成用户登录。
用户登录成功之后,会与SSO认证中心及各个子系统建立会话,用户与SSO认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过SSO认证中心,全局会话与局部会话有如下约束关系:
局部会话存在,全局会话一定存在 全局会话存在,局部会话不一定存在 全局会话销毁,局部会话必须销毁
- 首先用户访问系统1受保护的资源,系统1发现未登陆,跳转至SSO认证中心,并将自己的参数传递过去
- SSO认证中心发现用户未登录,将用户引导至登录页面
- 用户输入用户名和密码提交至SSO认证中心
- SSO认证中心校验用户信息,创建用户与SSO认证中心之间的会话,称为全局会话,同时创建授权令牌
- SSO认证中心带着令牌跳转会最初的请求地址(系统1)
- 系统1拿到令牌,去SSO认证中心校验令牌是否有效
- SSO认证中心校验令牌,返回有效,注册系统1的地址
- 系统1使用该令牌创建与用户的会话,称为局部会话,返回给用户受保护资源
- 用户访问系统2受保护的资源
- 系统2发现用户未登录,跳转至SSO认证中心,并将自己的地址作为参数传递过去
- SSO认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
- 系统2拿到令牌,去SSO认证中心校验令牌是否有效
- SSO认证中心校验令牌,返回有效,注册系统2地址
- 系统2使用该令牌创建与用户的局部会话,返回给用户受保护资源
单点登录的实现方案: 1.cookie+redis 把用户的id,ip为key,及用户账号密码数据信息为value存放在redis中; 把用户凭证存放在cookie里,用户登录系统后,返回一个加密的cookie,然后用户访问其他系统时带上这个cookie,与sso认证中心校验,通过验证后登录 2、session广播 用户登录其中一个系统时,系统服务器会将用户登录的信息复制到另一个系统服务器中,当用户登录另一个系统时,服务器查看是否已有用户信息,如果有就会直接进行登录 3、token 用jwt生成字符串,把用户信息保存到字符串里,通过cookie或地址栏方式返回前端,前端把收到的token存放在请求中或url地址里,每次请求就可以携带token进行请求,访问其他系统时,在地址栏或者请求头里面获取token,根据字符串获取用户信息,可以把token放在redis中设置有效期
代码实现
1 Tomcat HTTPS支持
注意: 生成密钥库的时候要填的名字姓氏,一定要填域名。
# 1 生成密钥库
1)d盘下面建一个文件夹cas,文件夹下面再建一个文件夹keystore(存放证书的地方)
2)keytool -genkey -v -alias laohan -keyalg RSA -keystore D:\cas\keystore\laohan.keystore
输入口令(随便输,自己记得就行)
# 2 从密钥库导出证书
keytool -export -trustcacerts -alias laohan -file D:/cas/keystore/laohan.cer -keystore D:/cas/keystore/laohan.keystore
# 3 将证书导入到JDK证书库
keytool -import -trustcacerts -alias laohan -file D:/cas/keystore/laohan.cer -keystore "D:\java\jdk8\jre\lib\security\cacerts"
密码:laohan
# 4 查看证书列表:
keytool -list -keystore "D:\java\jdk8\jre\lib\security\cacerts"
# 5 删除证书
keytool -delete -alias laohan -keystore "D:\java\jdk8\jre\lib\security\cacerts"
2 tomcat配置https支持
- 打开tomcat下的conf下的server.xml文件然后放进去保存,协议 最大线程 开启ssl
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\cas\keystore\laohan.keystore"
keystorePass="laohan"/>
- 乱码 conf 找 logging.properties 文件 找到下面配置修改,把UTF-8改为下面的GBK
java.util.logging.ConsoleHandler.encoding = GBK
- 下载war包,放到tomcat/webapp目录下,修改war包名字为cas.war
- 修改用户名和密码
D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes 如果没有,先启动一下tomcat
找这个文件
application.properties
打开最后一行有用户名密码
cas.authn.accept.users=casuser::Mellon
https://localhost:8443/cas/login
3 支持数据库密码
D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes
找这个文件
application.properties
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=select * from t_cas where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\lib下放入以下包
4 数据库配置 t_cas
CREATE TABLE `t_cas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
4 支持http
D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
增加http “serviceId” : “^(https|http|imaps)😕/.*”,
4 Springboot整合
1 导入依赖
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2 application.yml
server:
port: 7777
cas:
# cas服务端地址
server-url-prefix: https://www.laohan.com:8443/cas
# 没有带票据或者票据过期,定义的就是服务端的登录地址
server-login-url: https://www.laohan.com:8443/cas/login
# 登录成功后回调的地址
client-host-url: http://www.laohan.com:8888
# 类型
validation-type: cas3
3 前端页面
<!DOCTYPE html>
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/c8518ba625ad9a5ae57512c63790cc3a.png)
![img](https://img-blog.csdnimg.cn/img_convert/66e2431b44761ca588059f74f846a687.png)
![img](https://img-blog.csdnimg.cn/img_convert/3d3ce19ac924c33c00104ead61ffde6c.png)
![img](https://img-blog.csdnimg.cn/img_convert/22d21190d28fd01c962c7dce23514c19.png)
![img](https://img-blog.csdnimg.cn/img_convert/08bdcbc20e7ef31ac21bdfb441127fc7.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
[外链图片转存中...(img-74zaDPEr-1715632904593)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**