单点登录(一)| LDAP 协议
作者:阿东
微信公众号:杰哥的IT之旅(ID:Jake_Internet)
一、单点登录
1、原理
单点登录SSO(Single Sign on):一个多系统共存的环境下,用户在一处的登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。
以下两个是要点:
- 存储信任
- 验证信任
单点登录实现方式:
1.1 以Cookie作为凭证媒介
最简单的单点登录实现方式,是使用cookie作为媒介,存放用户凭证。用户登录父应用后,应用返回一个加密的cookie,当用户访问子应用的时候,会携带这个cookie,授权应用解密cookie并进行验证,校验通过则登录当前用户,此方式:cookie不安全,不能跨域实现免密登录。
1.2 通过JSONP实现
对于跨域问题,可以采用JSONP实现
用户在父应用登录后,跟session匹配的cookie会存到客户端中,当用户需要登录子应用时,授权应用访问父应用提供的JSONP接口,并在请求中带上父应用域名下的cookie,父应用接收到请求,验证用户的登录状态,返回加密的信息,子应用通过解析返回来的加密信息来验证用户,如果通过验证则登录用户。
1.3 通过页面重定向的方式
通过父应用和子应用来回重定向进行通信,实现信息的安全传递。
父应用提供一个GET方式的登录接口,用户通过子应用重定向连接的方式访问这个接口,如果用户还没有登录,则返回一个登录页面,用户输入账号密码进行登录。如果用户已经登录了,则生成加密的Token,并且重定向到子应用提供的验证Token的接口,通过解密和校验之后,子应用登录当前用户。
此方法解决了安全问题和跨域问题,但是没有前面两种方便。
1.4 使用独立登录系统
一般来说,大型应用会把授权的逻辑与用户信息的相关逻辑独立成一个应用,称为用户中心。用户中心不处理业务逻辑,只是处理用户信息的管理及授权给第三方应用,第三方应用需要登录的时候,则把用户的登录请求转发给用于中心进行处理,用户处理完毕返回凭证,第三方应用验证凭证,通过后就登录用户。
二、LDAP 协议
2.1 介绍
目录服务:一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能;是动态的、灵活的、易扩展的。
LDAP:基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,有优异的读性能,但写性能很差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。
LDAP 目录服务是由目录数据库和一套访问协议组成的系统
LDAP 是开放的internet标准,支持跨平台的internet的协议。
LDAP:轻量级目录访问协议,LDAP仅仅是一个访问协议。
应用:ldap用来构建同一的账号管理、身份验证平台,实现sso单点登录机制。
2.2 特点
- 基于TCP/IP
- 以树状结构存储数据
- 读取速度快,写入速度慢
- 采用client-server模型,服务器用于存放数据,客户端用于操作数据
- 跨平台、维护简单
- 支持SSL/TLS加密
- 协议是开放的
2.3 基本模型
目录树概念
1、目录树:在一个目录服务系统中,整个目录信息集可以表示一个目录信息树,树中的每个节点是一个条目;
2、条目:每个条目就是一条记录。每个条目有自己的唯一可以区别的名称(DN);
3、对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必需属性也会被继承下来;
4、属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性由必需属性和非必需属性;
关键字含义
关键字英文名称含义DcDomain component域名的部分,格式是将完整的域名分成几部分,如域名是http://example.com,分为dc=example,dc=comUidUser id用户ID songtao.xu(一条记录的ID)OuOrganization Unit组织单位,组织单位可以包含其他各种对象(包括其他组织单元)如“oa组”(一条记录所属组的)CnCommon name公共名称,如“Thomas johansson”(一条记录名称)SnSurname姓,如“许”DnDistinguished name“uid=dong.liu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)RdnRelative dn相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”,或‘cn=exmaple’
信息模型:在ldap信息以树状方式组织,在树状信息中的基本数据单元是条目,而每个条目由属性构成,属性中存储有属性值;
命令模型:在ldap中的条目定位方式,在ldap中每个条目均有自己的DN,DN是该条目在整个树中唯一名称标识,如同文件系统中,带路径的文件名就是DN;
功能模型:在ldap中共有四类10中操作:查询操作,如搜索、比较,更新类操作,如添加条目,删除条目,修改条目,修改条目名,认证类操作,如绑定,其他操作:如放弃和扩展操作。扩展操作:有修改密码和startTLS扩展;
安全模型:ldap中的安全模型主要通过身份认证、安全通道和访问控制来实现;
信息组织
目录条目以层次型的树状结构来组织。反应地域和组织机构界限。
树可以根据互联网域名组织,允许使用DNS为目录服务定位。
最顶层即根乘坐“基准DN(baseDN)”,如“dc=example,dc=com”或“o=example.org”
OU(organization Unit)用来表示公司内部机构,如部门等,也可表示设备、人员等。
openLDAP
openLDAP是LDAPv3协议的具体实现,可以支持多平台,以提供目录服务,其进程为slapd。
安装
环境:
Centos-7
Openldap-2.4.44
使用yum安装openldap服务端、客户端等相关组件(需要epel源)
# sudo yum install -y epel-release
# sudo yum install -y openldap openldap-servers openldap-clients openldap-servers-sql openldap-devel migrationtools compat-openldap
安装完成后查看版本号
# slapd -V
创建管理员密码,使用slappasswd命令生成加密字段
# slappasswd -s you_passwd
修改openldap配置文件,配置文件存放位置:/etc/openldap/slapd.d中
# vim /etc/openldap/slapd.d/cn=confg/olcDatabase={2}hdb.ldif
olcRootPW: {SSHA}xxxxxx
olcSuffix: dc=example,dc=com #dc修改域名
olcRootDN: cn=admin,dc=example,dc=com #admin为管理员账号# vim /etc/openldap/slapd.d/cn=confg/olcDatabase={1}monitor.ldif
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=Manager,dc=hzins,dc=com" read by * none #修改dc信息为自己的域名
验证配置文件是否正确
# slaptest -u
启动服务,openldap监听在389端口
# systemctl enable slapd
# systemctl start slapd
# firewall-cmd –add-service=ldap –permanent
# firewall-cmd –add-port=389/tcp –permanent
Openldap使用数据库是BerkeleyDB,需要复制一份配置文件到合适目录中,并修改权限
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap -R /var/lib/ldap
# chmod 700 -R /var/lib/ldap
导入基本的Schema表结构
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
修改migrate_common.ph文件,该文件的信息会用于生成ldif文件
# vim /usr/share/migrationtools/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = “example.com”; #大约在71行
$DEFAULT_BASE = “dc=example,dc=com”;
$EXTENDED_SCHEMA = 1;
使用两个migrate_base.pl脚本生成base.ldif文件,然后将该文件加载到openldap的数据库
# ./migrate_base.pl > /root/base.ldif
# ldapadd -x -W -D “cn=admin,dc=example,dc=com” -f /root/base.ldif
Openldap开启日志记录
1)首先创建日志文件,并调整权限,在修改rsyslog.con
# mkdir -p /var/log/slapd
# chown ldap:ldap /var/log/slapd
# touch /var/log/slapd/slapd.log
# chow ldap.ldap /var/log/slapd/slapd.log
# vim /etc/rsyslog.conf
Local4.* /var/log/slapd/slapd.log
# systemctl restart rsyslog
2)修改数据库配置文件
# vim log.ldif
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: 32
# ldapmodify -Y EXTERNAL -H ldapi:/// -f log.ldif
3)进行日志切割配置
# vim /etc/logrotate.d/ldap
/var/log/slapd/slapd.log {prerotate/usr/bin/chattr -a /var/log/slapd/slapd.logendscriptcompressdelaycompressnotifemptyrotate 100size 10Mpostrotate/usr/bin/chattr +a /var/log/slapd/slapd.logendscript
}
管理
Web端管理:Phpldapadmin
工具管理:Ldapadmin、ApacheDirectoryStudio
官网地址: http://directory.apache.org/studio/
单点登录(一)| LDAP 协议相关推荐
- ldap 单点登录 php,LDAP用户验证功能简介
LDAP功能是依赖于PHP的LDAP扩展,所以要加载LDAP扩展, 具体可以参考 安装PHP的LDAP扩展 一.功能简介 通过配置LDAP,实现ldap服务器的用户自动登录.也可以从ldap导入用户. ...
- LDAP 协议入门(轻量目录访问协议)
什么是 LDAP? LDAP 的全称是 Lightweight Directory Access Protocol,「轻量目录访问协议」. 划重点,LDAP 「是一个协议」,约定了 Client 与 ...
- 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置
华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...
- [转]使用 LDAP 组或角色限制访问,包含部分单点登录SSO说明
参考:http://www-01.ibm.com/support/knowledgecenter/api/content/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.crn ...
- [原创]django+ldap+memcache实现单点登录+统一认证
前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...
- 单点登录技术:微软Passport单点登录协议和自由联盟规范
原文地址:http://www.poluoluo.com/jzxy/201109/142060.html 随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务.然而目前提供服务的网站大多采用 ...
- 基于SAML协议 实现SP 单点登录
基于SAML协议及SpringSecurity 实现单点登录 SAML SP端 一. 什么是SAML协议 首先还是简单介绍一下什么是SAML协议: SAML 即安全断言标记语言,英文全称是 Secur ...
- 如何通过 OIDC 协议实现单点登录?
此文转载自:https://my.oschina.net/authing/blog/3212301 LiteOS Studio图形化调测能力,物联网打工人必备!>>> 什么是单点登录 ...
- SSO单点登录,实现对接SAML 协议对接IDP, 实现可拆解的SP服务
文章目录 1.概述 2. SAML协议介绍 2.1 相关参考资料 2.2 主要的概念 2.3 SP发起单点登录 2.4 IDP发起SSO单点登录 3. 系统接口设计文档 3.1. 相关接口 3.1.1 ...
最新文章
- Linux命令之more
- Android代码规范
- Hadoop详解(九):Hadoop Streaming和Pipes原理和实现
- VS 常用的一些技巧和问题集锦【不断的更新中】
- 大连开发区中老年运动微信群_消暑!大连近郊最受欢迎的海滨浴场集合来啦
- MySQL8.0: Serialized Dictionary Information(SDI) 浅析
- Spring Boot2.x 整合quartz集群
- mysql命令行操作大全_mysql命令行操作大全 mysql命令行操作总结
- 登陆126邮箱 出现 403 Forbidden 腾达路由器问题
- Chrome最新版本如何通过JS设置支持自动播放音频
- 银河麒麟操作系统常用问题及解决方法
- springboot DataSource
- ios11.3相册闪退_iOS11拍照闪退,保存图片闪退问题(writeImageToSavedPhotosAlbum)
- Spring Boot配置MongoDB多数据源
- python打开是什么颜色-Python中常见颜色记录
- python3常用模块_Python学习笔记三(常用模块)
- Hanoi塔(汉诺塔/梵天塔)问题
- excel怎么做汇总平均值?
- 【Android Studio】关于cvc-complex-type.2.4.a: ‘base-extension‘ {layoutlib} 正确解法
- 时间管理---规律你的生活
热门文章
- asp.net 著名网站
- php 反射 thinkphp,PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用...
- 2015.10.26软件更新公告
- 网络工程师成长日记422-奇葩先生
- redis使用队列进行抢购活动(秒杀)
- 关于广告和商业化,一点心里话
- 3/18我和塔拉庄园的赛诗会
- linux中mkfs是什么命令,如何在Linux中使用mkfs命令[用于磁盘格式化]
- 5、JVM分代模型--新生代 的垃圾回收
- HTML ===> 向右侧展开div