基于域控的SSO单点登录

news2024/11/15 13:37:04

131a396766983f7d417a4b1d24ab7104.jpeg

大家好,好久不见,今天老吕给大家来一篇偏冷门知识的文章。

一、需求

大型集团企业内部会有许多业务系统,工作人员也往往需要登录多个业务系统才能完成工作,这就可能会存在一些问题

1、多套账号与密码需要记录或者记忆

2、多次登录,不太好的工作体验与工作效率

二、解决方案

问题的本质是需要一个企业内部工作人员办公时使用的单点登录SSO方案

方案1:

常用方案,统一账号系统,建立用户中心,统一用户创建与登录渠道,通过cas、oauth2、oidc等协议实现用户身份的传递与验证;

方案2:

基于域控的方案,将操作系统域账号与业务系统账号体系打通,通过kerberos、ntlm等安全协议实现用户身份的识别与传递;

本文主要讲解的是如何通过方案2来实现SSO

三、域控SSO的实现原理

c3b8e964db2448f60e64c7f132532da8.png

在这个图中按角色划分有4个参与方

参与方1-域控服务器:

建立存储域账号密码(包括客户机账号与服务账号),同时实现了KDC功能;

参与方2-客户机:

同时和域控服务和SSO服务通信完成身份信息的传递;

参与方3-SSO服务:

这个就是开发人员需要开发的服务,目标是通过解密加密令牌来获得客户机身份信息,进一步将身份信息加密后通过IODC协议传给业务系统;

参与方4-业务系统:

可能是多个,他们通过对接SSO服务来获得专用密钥,从而可以解密加密的身份信息,最终获得可信的明文身份ID,进一步通过生成自身的登录令牌转向自有控制,从而登录成功。

四、安全认证协议Kerberos

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(对称密钥)执行认证服务的。

kerberos协议交互过程如下:

83867c617f77457d510c93145f173e1c.png

其中:

AS_REQ内容主要为 :

1、用户名和客户端主机名信息 2、一个被client password hash加密的时间戳 3、明文的时间戳

AS_REP内容主要为:

1、SessionKey(被Client password hash 加密)

2、TGT=SessionKey+Client Info+ EndTime(TGT整体被KDC password hash加密)

TGS_REQ内容主要为:

1、TGT=SessionKey+Client Info+ EndTime(TGT整体被KDC password hash加密)

2、Client Info+Timestamp+ApplicationServerInfo(整体被SessionKey加密)

TGS_REP内容主要为:

1、Server Session Key(被SessionKey加密,用于和application  server通信时加密数据)

2、ServiceTicket=ServerSessionKey+ClientInfo+EndTime(整体被Service password hash 加密)

AP_REQ内容主要为:

1、ServiceTicket

2、ClientInfo+Timestamp (整体被TGS颁发的Server Session Key加密)

AP_REP验票过程为:

1、applicat server会使用Service password hash对ServiceTicket进行解密从而得到ServerSessionKey,ClientInfo,EndTime

2、用ServerSessionKey解密另一段密文,从而得到 ClientInfo和Timestam信息

3、从而可以确认 ClientInfo的正确性,并得到身份ID信息

套路总结:

1、不停地签发临时密钥,使用临时密钥进行对称加密;

2、基于约定对称密钥再进行进一步对临时密钥和内容加密;

3、通过时间戳判断票据是否过期

五、基于Java实现kerberos单点登录

弄清楚了原理之后就可以开干了,SSO Service部分就是需要用Java代码实现的部分,这部分要实现的目标是:

1、通过HTTP标头 Authorization 来获取加密的票据信息

2、如果Authorization为空,则返回401状态码并且响应:WWW-Authenticate: Negotiate 标头,告诉客户端浏览器服务端能处理的认证机制

3、客户端会选择(OS提供GSS-API,浏览器会调用,从而得到客户端支持的认证机制)自身支持的、合适的认证机制(这个过程也叫认证协商过程)

4、window客户端的认证机制是:当前客户端加入了正确的域,并且当前访问使用了正确的域名访问SSO Service,这时会优先使用kerberos认证机制,其它情况优先使用NTLM认证机制

5、当服务端发现Authorization不是我们想要的协议票据时,接着返回401即可,直到得到我们想要的票据

6、假设最终服务端收到了kerberos票据,就需要对票据进行解密验证客户端身份了,如果验证通过就会得到明文的客户端登录账号信息

7、具体如何解密要参考Java 的JAAS api 对kerberos的支持

六、Java开源方案参考资源

1、Tomcat认证模块

(https://tomcat.apache.org/tomcat-9.0-doc/windows-auth-howto.html)

特点:依赖jaas,需要keytab文件,配置文件

2、Waffle

(http://waffle.codeplex.com/)

特点:不需要keytab文件,依赖native api

3、Spring Security - Kerberos Extension

http://static.springsource.org/spring-security/site/extensions/krb/index.html

4、Jespa

(http://www.ioplex.com/)

特点:收费,支持SPNEGO/Kerberos协议和ntlm v1

5、SPNEGO AD project at SourceForge 开源项目

(https://spnego.sourceforge.net/index.html)

特点:只支持SPNEGO/Kerberos协议

6、使用IIS做反向代理

2023第一篇,今天就到这里,谢谢大家支持!

23959d4655954fb879d90aa693585787.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14.live555mediaserver-setup请求与响应

live555工程代码路径 live555工程在我的gitee下(doc下有思维导图、drawio图):https://gitee.com/lure_ai/live555/tree/master 学习demo live555mediaserver.cpp 学习线索和姿势 1.学习的线索和姿势 网络编程 流媒体的地基是网络编程&…

Git 的常用命令

Git 的常用命令 目录Git 的常用命令帮助初始化配置提交远程仓库管理版本控制删除分支管理查看文件提交、状态帮助 查看常用命令 git help查看某个命令的使用帮助 git help [命令]查看 git 使用指南(这个命令会详细展示 git 的使用周期) git help tut…

【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)

前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员&…

2022.12 青少年机器人技术等级考试理论综合试卷(三级)

2022年12月 青少年机器人技术等级考试理论综合试卷(三级) 分数: 100 题数: 30 一、 单选题(共 20 题, 共 80 分) 1.舵机接到 Arduino UNO/Nano 主控板的 2 号引脚, 下列选项中, 实现舵机在 0 度…

4、字符串处理

目录 一、字符串的构造 二、字符串比较 三、字符串查找 四、字符串替换 五、字符串——数值转换 Matlab中的字符串函数有: 一、字符串的构造 字符串或字符串数组的构造可以通过直接给变量赋值来实现,具体表达式中字符串的内容需要写在单引号内。如…

ESP8266 ArduinoIDE 搭建web服务器与客户端开发

一、wifi 相关配置 1.1 无线终端 wifi 模式 此模式中&#xff0c;esp8266 会连接到指定 wifi 进行工作。 #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库const char* ssid "home"; // 连接WiFi名&#xff08;此处使用home为示例&…

Vue2-Vue开发环境搭建

一、IDE编辑器&#xff1a;Vscode&#xff0c;自行下载安装即可 二、三种引入方式&#xff0c; 教程使用方式一引入 Vue官网&#xff1a;https://v2.cn.vuejs.org/v2/guide/installation.html 方式一&#xff1a;直接script引入 教程下载开发版本&#xff0c;下载到本地&…

使用人工智能机器人提高农业效率| 数据标注

人工智能技术创新不仅仅蔓延到智慧城市、智能建筑或新的混合工作模式&#xff1b;机器人还通过人工智能、自动拖拉机、实时监测农作物的传感器、无人机或水果和蔬菜收获机器人来彻底改变农业。今天&#xff0c;我们将向您介绍一些已经在农业中使用的最有趣的AI技术&#xff0c;…

微信小程序textarea的placeholder的行高怎么修改

目前不支持修改行高。如果你的内容设置了行高但是placeholder没有行高会导致输入内容的时候感觉不是对齐的&#xff0c;想要解决这个问题怎么办呢/ 我们可以自己写个text假装是placeholder的内容。然后textarea获取焦点输入内容的时候就不显示这个text的内容。 <view class…

新入公司 git基本命令使用(二) 小乌龟版

git命令行的操作复杂不直观,且容易出错. 这里推荐大家使用 git版小乌龟插件进行使用 下载地址 :https://tortoisegit.org/download/ 安装一路next即可 创建本地仓库 右键点击克隆, 然后输入项目地址,确认 拉取代码 右键点击同步 , 然后再界面中选择好对应的分支, 点击拉取 …

朴素贝叶斯分类算法和实例演示

文章目录贝叶斯公式算法原理实例演示代码实现本文开始&#xff0c;我们来学习一种新的机器学习方法&#xff1a;贝叶斯算法。 这次从最基础的朴素贝叶斯分类算法出发&#xff0c;了解相关的算法原理。 考虑如下一种分类问题&#xff1a;样本中只包含2类特征&#xff0c;标签只…

接口返回数据实体类属性大写变成小写

问题背景 今天遇到一个特别恶心的事情&#xff0c;我的返回实体类遵循了字段属性明明规则&#xff0c;驼峰命名法&#xff0c;在接口返回数据给前端的时候&#xff0c;所有数字那个字母全部自动变为了小写字母&#xff01; 错误的返回示例&#xff1a; 正确的返回示例&#x…

【鸟哥杂谈】腾讯云 CentOS8 Linux环境搭建docker

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2023-01-15 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

当青训营遇上码上掘金之主题四-攒青豆

theme: juejin 攒青豆 现有 n 个宽度为 1 的柱子&#xff0c;给出 n 个非负整数依次表示柱子的高度&#xff0c;排列后如下图所示&#xff0c;此时均匀从上空向下撒青豆&#xff0c;计算按此排列的柱子能接住多少青豆。&#xff08;不考虑边角堆积&#xff09; 以下为上图例子…

【JavaEE初阶】第一节.计算机是如何工作的

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 文章目录 前言 一、计算机发展历史 二、冯诺依曼体系 三、CPU 3.1 浅谈CPU 3.2 寄存器 3.3 指令 3.4 CPU的操作流程 3.5 时钟周期 四、编程语言 总结…

vue.js客服系统实时聊天项目开发(四)引入iconfont图标代码

普通引入模式下是这样的 首先&#xff0c;您需要在iconfont.cn上创建一个账号并添加图标。 然后&#xff0c;将iconfont的链接代码加入到页面的head标签中&#xff0c;例如&#xff1a; <link rel"stylesheet" href"//at.alicdn.com/t/font_123456_abcdefghi…

Docker为什莫方便(学习的记录)

Docker为什莫方便&#xff08;学习的记录&#xff09; 程序 — apk— 发布到商城------下载安装即可使用 程序----打包项目带上环境&#xff08;创建一个项目的镜像&#xff09;-----发布到docker仓库当中------下载安装运行即可 &#x1f315; docker的核心思想 将各个环境…

【手写 Vue2.x 源码】第二十七篇 - Vue 生命周期的实现

一&#xff0c;前言 上篇&#xff0c;主要介绍了数组依赖收集的实现 本篇&#xff0c;Vue 生命周期的实现 二&#xff0c;Vue.mixin 介绍 1&#xff0c;mixin 简介 Vue2 中可以通过 Vue.mixin 为 vue 进行功能扩展 开发中&#xff0c;经常使用 mixin 来为所有组件增加一些生…

机器学习的相关软件框架下载安装

文章目录一、Anaconda1. Anaconda 的下载2. Anaconda 的安装3. Anaconda Navigator 打不开问题&#xff08;不适用所有&#xff09;二、PyTorch-CPU1. PyTorch 环境创建2. PyTorch 下载3. Jupyter 中使用 PyTorch三、Python 版本升级与包的维护1. 更新 Anaconda2. 查看与更新 p…

回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出

回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出 目录回归预测 | MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现SSA-LSSVM麻雀算法优化最小二乘支持向量机…