什么叫LDAP?LDAP服务器是什么?

什么叫LDAP?LDAP服务器是什么?,第1张

LDAP是基于TCP/IP协议的目录访问协议,是Internet上目录服务的通用访问协议。LDAP的出现简化了X500目录的复杂度,降低了开发成本,是X500标准的目录访问协议DAP的子集,同时也作为IETF的一个正式标准。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。
从上述定义不难看出LDAP是一个目录,那么该目录是如何出现,有什么用呢?
在当今的信息世界,网络为人们提供了丰富的资源。随着网络资源的日益丰富,迫切需要一种能有效管理资源信息并利于检索查询的服务技术。目录服务技术随之产生。
1LDAP目录服务可以有效地解决众多网络服务的用户账户问题。
2LDAP目录服务规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。
3LDAP目录服务是以树状的层次结构来描述数据信息的,此种模型适应了众多行业应用的业务组织结构。
LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。
LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。

本案涉及三个概念及功能模块,即门户、单点登录和统一身份认证。
单点登录(Single Sign-On,缩写为SSO),它是目前业务整合时使用较多的一种解决方案,通过SSO,用户只需要在某个应用系统入口登录一次,就可以访问所有与该应用系统相互信任的其它应用系统。
目前成熟的SSO实现框架有很多,开源的有JOSSO、CAS等很多,你可以选择其中之一与门户集成即可,集成方法的问题可在选型后在网络中查找,可选方案请参考《Liferay 集成 CAS 实现单点登录与应用系统集成》 >寒假学习的小课题,把之前的笔记整理整理记录一下(长文警告)因为当时看到的东西涉及很多,所以有一些地方没有深入去探讨。

百度百科:单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
简而言之就是用户在多个相互信任的应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。这里的关键是一次登录,以及一次退出,都对所有的系统生效。

在普通的登录中,比如典型的B/S情景,浏览器访问服务器,发送登录请求,在发送完用户名和密码之后,服务器会生成该用户的session来标准该用户的状态,比如已登录还是已注销,并给一个cookie给浏览器,因此,用户继续访问就会带上这个cookies,服务端会根据这个Cookie找到对应的session,通过session来判断这个用户的登录状态。比如php中使用phpsessid。当然也可以自定义session的生命周期,session的生命周期过长的话一旦session被盗用就会出现用户被窃取的情况。同时,生命周期过长的session配置会占用较多的服务器资源。

单点登录主要针对同平台下多应用,多系统的情景下多次登录的一种解决方案。单点登录相当于将多个应用的认证体系联通。
假设现在一个平台上有3个都带有登录功能的应用,由上面的普通登录的情况可以想到,这3台服务器都会自己的记录session。那么要想达到单点登录,一个最简单的方法就出现了:共享session。

共享session的方式来实现单点登录是最方便也是最直接的。在三个子系统中,使用同一个额外的记录session的服务器,比如我们可以使用一个redis服务器来存储三个系统的session。

用户登录了应用1,获取了应用1返回的cookies,再次访问应用1的其他功能的候携带了cookie就是已登录的状态了,但是这样又有新的问题,虽然实现了共享session,但是用户登录了应用1,获取了应用1返回的cookie,但是因为cookie是无法跨域的,因此用户无法使用应用1的cookie去访问应用2。这里我们就需要将系统的全局cookie domain的属性设置为顶级域名,比如应用1的域名是1testcom,应用2的域名是2testcom。在普通登录的情况下,应用1的cookie domain的属性是1testcom,指这个cookie只能在该子域名上被使用。我们将系统的全局cookie domain设置为顶级域名,即testcom,这样就可以实现用户登录了应用1,之后可以以已登录状态访问应用2和3。
上面的共享session的情况是三个应用都有登录功能,还有一种类似的情况是应用1和应用2都有登录模块和其他模块,还有一个单独的SSO系统,是仅有登录模块的:

共享session的方法虽然简单,但是存在局限性,因为使用了cookie顶域的特性,所以不能做到跨域。一个公司或者一个平台很可能不是所有的域名都在在一个一级域名之下的,所以同域名下的单点登录并不是完整的单点登录。

先说说openid,openid是一种认证标准,规定如何认证的标准!即其关注的是登录时身份的认证。官方给出的一个场景,其中一方是一个openid身份服务器,用来存放注册好的openid账号,另一方是受这个openid身份服务器信赖的服务或应用。openid协议就是提供openid身份服务器和被信赖的服务或应用之间的通信的。比如我们在很多网站上可以使用QQ登录,这里的腾讯的QQ就是openid的身份服务器,我们所要登录的网站就是受信赖的服务或应用。
在使用openid实现单点登录的方法有很多,可以使用上面共享session的方法,即把openid带在cookie里面,但是这样也会出现一样的cookie跨域的问题。
在实际场景中,我们在访问提供服务的应用时检测到未登录就会直接跳转到openid身份服务器,或者没有重定向而是在登录表单附近点击选择使用第三方openid登录,进行账号密码登录(这可以保证我们所登录的服务器无法获取我们的敏感身份认证信息),具体流程如下:
CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。CAS就是一个现成的单点登录的demo,企业只需要简单修改就可使用。
CAS支持各种协议,SAML,OAuth,OpenID,OIDC等等,支持LDAP,Radius,JWTX,509等等进行身份认证和授权,还有各种常用语言的客户端,Java,PHP,C# 等等。反正就是一个十分完整的,兼容性特别好的SSO框架。
简单了解CAS是如何实现单点登录的。在官网上可以看到其给出的一个 流程图 ,。这个图说的特别详细,一下就能看懂,直接原图上进行标注查看:
学习了上面几种单点登录的知识,结合实际场景可知,跨域单点登录才是真正的单点登录,因为实际情况下很多平台或者域名不可能都在一个一级域名下。在解决跨域单点登录的问题的时候,上面也给说了几种方式,但是究其根本,就是利用一个SSO认证中心来实现认证与授权的。当然,也会有其他的解决跨域单点登录的方案,但是大体流程都与cas类似。

比如在上图的11步骤,也可使用POST包,或者JSONP和iframe方法来跨域发送请求进行重定向。
在利用认证中心来实现单点登录是现在比较普遍的解决方案,那么有没有不需要使用认证中心来解决跨域单点登录的方案呢?
利用JSONP同步登录状态,大概流程流程如下:

在学习单点登录的过程中,在其中认证的过程中授权令牌的传递等相关信息没有特别详细的说明,而且在思考单点登录的时候也会有想过一个比较矛盾的问题:单点登录的目标是为了让用户可以在相互信任的系统中一次登录即可,但是如果真的是做到所有用户都可以访问所有系统,岂不是会带来越权的问题,是否需要对不同的用户以不同的授权,甚至限制访问的应用,但是这样是不是就不是原本狭义的单点认证?

在说单点登录的认证和授权之前,先谈一谈我一直想弄清楚的统一身份认证和单点登录的区别。说起单点登录可能很少听过,但是统一身份认证肯定不陌生,不管是企业还是高校都会有这种统一身份认证的系统。
统一身份认证最重要的一方面就是身份认证,另一方面就是和身份认证相关的授权控制,权限控制。而单点登录是多应用一次登录,也可以叫统一登录,可以理解为主要在认证方面。对于统一身份认证来说会有账号管理,如LDAP,认证管理OAuth,SMAL等,因此我觉得,统一身份认证一般是包括狭义的单点登录,狭义的单点登录,即只需要满足多应用一次登录即可。但是现在的单点登录,SSO系统并不仅仅是要求这些,他的范围正在慢慢扩大。

单点登录的认证和授权,前面说到的CAS实现单点登录里就会看到需要ticket来进行认证,授权。CAS支持多种认证方案,比如OAuth,OpenID,SAML等等,我们可以来比较比较用这些协议的区别,或者说是在哪些场景下使用哪些认证方案较为合适。本身单点登录是没有权限控制的功能的,但是因为这些认证协议的需求,自然支持了权限控制。
在使用SAML进行认证的过程中,可以看到下图,其是基本流程都差不多,这里需要注意的就是在用户在认证中心成功登陆之后,重定向的时候返回的是一个SAML token,一个XML节点,这里的token会包括用户的身份信息,用户名等。

在OAuth20的标准中流程是和上面的基本相同,但是OAuth2因为客户端并没有一点是浏览器,所以token中默认是没有签名的。这里可能没有体现出来,OAuth2的目标是授权,所以token更关注的是权限,token在向认证服务器验证的时候就会有不同的授权,但是既然是授权,就间接实现了认证。

在传统的认证中都是基于session机制的,具体的session模式上面也说了,根据其特性可知session的一些确定:

>

意思是网络通信超时,网络连接不上。

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的。

这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的。

要实现SSO,需要以下主要的功能:

系统共享

统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行校验,判断其有效性。

信息识别

要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
企业应用集成(EAI)。企业应用集成可以在不同层面上进行:例如在数据存储层面上的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”等等。事实上,还用一个层面上的集成变得越来越重要,那就是“身份认证”的整合,也就是“单点登录”。
单点登录的技术实现机制:当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
可以看出,要实现SSO,需要以下主要的功能:
所有应用系统共享一个身份认证系统;
所有应用系统能够识别和提取ticket信息;
应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。
其中统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10476126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存