作者:阿东
微信公众号:杰哥的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 协议相关推荐

  1. ldap 单点登录 php,LDAP用户验证功能简介

    LDAP功能是依赖于PHP的LDAP扩展,所以要加载LDAP扩展, 具体可以参考 安装PHP的LDAP扩展 一.功能简介 通过配置LDAP,实现ldap服务器的用户自动登录.也可以从ldap导入用户. ...

  2. LDAP 协议入门(轻量目录访问协议)

    什么是 LDAP? LDAP 的全称是 Lightweight Directory Access Protocol,「轻量目录访问协议」. 划重点,LDAP 「是一个协议」,约定了 Client 与 ...

  3. 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置

    华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...

  4. [转]使用 LDAP 组或角色限制访问,包含部分单点登录SSO说明

    参考:http://www-01.ibm.com/support/knowledgecenter/api/content/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.crn ...

  5. [原创]django+ldap+memcache实现单点登录+统一认证

    前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...

  6. 单点登录技术:微软Passport单点登录协议和自由联盟规范

    原文地址:http://www.poluoluo.com/jzxy/201109/142060.html 随着互联网络应用的普及,越来越多的人开始使用互联网上提供的服务.然而目前提供服务的网站大多采用 ...

  7. 基于SAML协议 实现SP 单点登录

    基于SAML协议及SpringSecurity 实现单点登录 SAML SP端 一. 什么是SAML协议 首先还是简单介绍一下什么是SAML协议: SAML 即安全断言标记语言,英文全称是 Secur ...

  8. 如何通过 OIDC 协议实现单点登录?

    此文转载自:https://my.oschina.net/authing/blog/3212301 LiteOS Studio图形化调测能力,物联网打工人必备!>>> 什么是单点登录 ...

  9. SSO单点登录,实现对接SAML 协议对接IDP, 实现可拆解的SP服务

    文章目录 1.概述 2. SAML协议介绍 2.1 相关参考资料 2.2 主要的概念 2.3 SP发起单点登录 2.4 IDP发起SSO单点登录 3. 系统接口设计文档 3.1. 相关接口 3.1.1 ...

最新文章

  1. Linux命令之more
  2. Android代码规范
  3. Hadoop详解(九):Hadoop Streaming和Pipes原理和实现
  4. VS 常用的一些技巧和问题集锦【不断的更新中】
  5. 大连开发区中老年运动微信群_消暑!大连近郊最受欢迎的海滨浴场集合来啦
  6. MySQL8.0: Serialized Dictionary Information(SDI) 浅析
  7. Spring Boot2.x 整合quartz集群
  8. mysql命令行操作大全_mysql命令行操作大全 mysql命令行操作总结
  9. 登陆126邮箱 出现 403 Forbidden 腾达路由器问题
  10. Chrome最新版本如何通过JS设置支持自动播放音频
  11. 银河麒麟操作系统常用问题及解决方法
  12. springboot DataSource
  13. ios11.3相册闪退_iOS11拍照闪退,保存图片闪退问题(writeImageToSavedPhotosAlbum)
  14. Spring Boot配置MongoDB多数据源
  15. python打开是什么颜色-Python中常见颜色记录
  16. python3常用模块_Python学习笔记三(常用模块)
  17. Hanoi塔(汉诺塔/梵天塔)问题
  18. excel怎么做汇总平均值?
  19. 【Android Studio】关于cvc-complex-type.2.4.a: ‘base-extension‘ {layoutlib} 正确解法
  20. 时间管理---规律你的生活

热门文章

  1. asp.net 著名网站
  2. php 反射 thinkphp,PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用...
  3. 2015.10.26软件更新公告
  4. 网络工程师成长日记422-奇葩先生
  5. redis使用队列进行抢购活动(秒杀)
  6. 关于广告和商业化,一点心里话
  7. 3/18我和塔拉庄园的赛诗会
  8. linux中mkfs是什么命令,如何在Linux中使用mkfs命令[用于磁盘格式化]
  9. 5、JVM分代模型--新生代 的垃圾回收
  10. HTML ===> 向右侧展开div