已有统一身份认证平台,兼容ldap和cas设计(一)概念简介和ldap兼容

时间:2024-10-12 19:59:29

背景

已有用java自研的统一身份认证平台。完成的功能有登录校验,用户信息存储,权限角色系统管理。

需求

有运维提出需要兼容cas+ldap单点登录

实际

这篇文章可能旨在帮助理解ldap和cas以及他们的使用流程。因为经过了解和设计,发现违背了我们的初衷,所以并未真实使用。但是博主毕竟这么辛苦的学习和设计,还是记录一下。

单点登录和登出

单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

同时还需要单点登出,这样才是一个完整的单点闭环。

ldap单点登录兼容设计

ldap简介

LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。

树形存储用户信息,需要服务器存储数据。

存储的最小单位是名目即dn:由多个节点名组成,类似于mysql的primaryKey。

优势:ldap查询速度更快

ldap≠sso

ldap不能实现单点登录。但是可以多个系统分别集成ldap,也就是我们自研的身份认证平台实现的功能,密码明文校验存在安全隐患。

ldap用户登录验证流程(二次验证)

  1. 用户提交账号/密码到业务系统
  2. 业务系统访问统一身份认证平台
  3. 统一身份认证平台用内置的默认用户和密码去ldap数据库查询,有关用户名的信息
  4. ldap返回结果是否存在,不存在或多条报错,存在取出这条信息
  5. 再用账号和salt加密之后的用户密码去登录,是否成功。

在这里插入图片描述
为什么需要二次验证?
LDAP服务器对于password属性默认都是不可读的。而且存储明文。继承现有的uac加密方式存储为加密之后的明文。

第一次绑定是去搜索,直接输入dn太过冗长。

ldap兼容前后对比

兼容前后对比 用户校验 信息同步对象 同步场景
兼容ldap之前 加密之后的字段对比 mysql,activemq 用户新增,删除,修改,修改密码
兼容ldap之后 加密之后的字段作为密码登录ldap mysql,activemq,ldap 用户新增,删除,修改密码

ldap存储设计

dn:uid={用户id|用户账号|用户手机号|用户邮箱},ou={租户编码|租户id},o=c503,o=com
对象:不确定是否可以自己新建,还是使用现成的。使用现成的也可以满足要求。
存储的字段:id,account,password,salt,mobile,mail。这些是必须要有的信息,其中mail可以为空.也可以全量存入。但是没必要。只是单点登录验证而已。
在这里插入图片描述

ldap服务部署

可以考虑部署openldap,它主要包括下述4个部分:

  1. slapd - 独立LDAP守护服务
  2. slurpd-独立的LDAP更新复制守护服务(用户数据庞大时,为了缓解并发压力可以使用主从ldap)
  3. 实现LDAP协议的库(用户数据存储的地方)
  4. 工具软件和示例客户端

参考资料:

【1】Spring Boot 整合 LDAP 开发教程

【2】LDAP概念和原理介绍

【3】比较靠谱的ldap文档

【4】Spring LDAP Reference

【5】openldap

【6】基于LDAP进行验证-方法和问题