做者:阿东
微信公众号:杰哥的IT之旅(ID:Jake_Internet)
1、单点登陆
一、原理
单点登陆SSO(Single Sign on):一个多系统共存的环境下,用户在一处的登陆后,就不用在其余系统中登陆,也就是用户的一次登陆能获得其余全部系统的信任。sql
如下两个是要点:数据库
存储信任vim
验证信任api
单点登陆实现方式:
1.1 以Cookie做为凭证媒介
最简单的单点登陆实现方式,是使用cookie做为媒介,存放用户凭证。用户登陆父应用后,应用返回一个加密的cookie,当用户访问子应用的时候,会携带这个cookie,受权应用解密cookie并进行验证,校验经过则登陆当前用户,此方式:cookie不安全,不能跨域实现免密登陆。跨域
1.2 经过JSONP实现
对于跨域问题,能够采用JSONP实现安全
用户在父应用登陆后,跟session匹配的cookie会存到客户端中,当用户须要登陆子应用时,受权应用访问父应用提供的JSONP接口,并在请求中带上父应用域名下的cookie,父应用接收到请求,验证用户的登陆状态,返回加密的信息,子应用经过解析返回来的加密信息来验证用户,若是经过验证则登陆用户。服务器
1.3 经过页面重定向的方式
经过父应用和子应用来回重定向进行通讯,实现信息的安全传递。微信
父应用提供一个GET方式的登陆接口,用户经过子应用重定向链接的方式访问这个接口,若是用户尚未登陆,则返回一个登陆页面,用户输入帐号密码进行登陆。若是用户已经登陆了,则生成加密的Token,而且重定向到子应用提供的验证Token的接口,经过解密和校验以后,子应用登陆当前用户。cookie
此方法解决了安全问题和跨域问题,可是没有前面两种方便。session
1.4 使用独立登陆系统
通常来讲,大型应用会把受权的逻辑与用户信息的相关逻辑独立成一个应用,称为用户中心。用户中心不处理业务逻辑,只是处理用户信息的管理及受权给第三方应用,第三方应用须要登陆的时候,则把用户的登陆请求转发给用于中心进行处理,用户处理完毕返回凭证,第三方应用验证凭证,经过后就登陆用户。
2、LDAP 协议
2.1 介绍
目录服务:一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能;是动态的、灵活的、易扩展的。
LDAP:基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,相似文件目录同样。
目录数据库和关系数据库不一样,有优异的读性能,但写性能不好,而且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。
LDAP 目录服务是由目录数据库和一套访问协议组成的系统
LDAP 是开放的internet标准,支持跨平台的internet的协议。
LDAP:轻量级目录访问协议,LDAP仅仅是一个访问协议。
应用:ldap用来构建同一的帐号管理、身份验证平台,实现sso单点登陆机制。
2.2 特色
基于TCP/IP
以树状结构存储数据
读取速度快,写入速度慢
采用client-server模型,服务器用于存放数据,客户端用于操做数据
跨平台、维护简单
支持SSL/TLS加密
协议是开放的
2.3 基本模型
目录树概念
一、目录树:在一个目录服务系统中,整个目录信息集能够表示一个目录信息树,树中的每一个节点是一个条目;
二、条目:每一个条目就是一条记录。每一个条目有本身的惟一能够区别的名称(DN);
三、对象类:与某个实体类型对应的一组属性,对象类是能够继承的,这样父类的必需属性也会被继承下来;
四、属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性由必需属性和非必需属性;
关键字含义
Rdn Relative 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.log endscript compress delaycompress notifempty rotate 100 size 10M postrotate /usr/bin/chattr +a /var/log/slapd/slapd.log endscript }
管理Web端管理:Phpldapadmin工具管理:Ldapadmin、ApacheDirectoryStud