您的位置:

单点登录原理

一、什么是单点登录

单点登录(Single Sign On,SSO)指的是用户只需要登录一次,在多个应用系统中使用同一个账号和密码登录,而且在所有系统中都可以使用,而不需要在每个系统中都进行登录操作。

举个例子,你在电商网站A中登录了自己的账号,然后又进入了另外一个电商网站B,你发现你并不需要再次进行登录,因为这两个网站共用了相同的用户信息。

二、单点登录的应用场景

单点登录的应用场景非常广泛,对于一些需要用户身份验证的网站来说,SSO能够大大减少用户的输入次数和密码的多次检验,提高用户体验,减少用户的负担。

下面列举一些常见的应用场景:

1.企业内部

一个企业内部可能会有多个系统,如OA、CRM、ERP等,员工需要频繁地在多个系统中进行切换,如果在每个系统中都要进行一次登录操作,那就会很麻烦,单点登录能够解决这个问题,只需要登录一次即可。

2.门户网站

门户网站通常会整合多个Web应用,如邮箱、网盘、社交、新闻资讯等,如果用户需要在每个应用中都进行登录操作,那会很麻烦,而且很容易忘记某个应用的密码,单点登录能够让用户在门户网站中登录一次,就可以访问所有的Web应用。

3.互联网产品

一些互联网产品,如金融、医疗、教育等,需要用户进行身份认证和信息管理,如果用户需要在每个产品中都进行登录,那就容易疲于奔命,单点登录能够简化流程,减少用户的负担。

三、单点登录的原理

要实现单点登录,首先需要一个认证中心,负责管理用户的身份信息和权限信息。用户只需要登录一次认证中心,就能够获得一些加密的票据,这些票据能够在其他应用系统中被识别和认证,从而实现单点登录。

四、实现单点登录的方法

1.Cookies共享

Cookies是指网站服务器存放在用户本地浏览器上的数据,它能够记录用户的登录信息和访问状态,下次用户再访问网站时,浏览器会携带这些数据进行访问,从而实现自动登录。如果多个应用系统在同一域名下,那么它们可以共享Cookies,实现单点登录。

<!-- 设置Cookies -->
document.cookie = "username=admin;password=123456;path=/"
 
<!-- 获取Cookies -->
var cookies = document.cookie.split(";")
for (var i=0; i<cookies.length; i++) {
    var cookie = cookies[i].split("=")
    console.log(cookie[0], cookie[1])
}

2.Token认证

Token是指一种加密的票据,它包含用户身份信息和权限信息,服务器将Token存放在客户端,下次访问时,客户端会将Token发送给服务器进行认证。多个应用系统可以共用同一份Token,实现单点登录。

<!-- 生成Token -->
var token = CryptoJS.AES.encrypt("username=admin;password=123456", "secret")
 
<!-- 存储Token -->
localStorage.setItem("token", token)
 
<!-- 获取Token -->
var token = localStorage.getItem("token")
var decryptedData = CryptoJS.AES.decrypt(token, "secret").toString(CryptoJS.enc.Utf8)
console.log(decryptedData)

3.集成SAML协议

Security Assertion Markup Language(SAML)是一种XML标准,用于身份认证和授权管理。它通过XML格式化的消息交换,实现单点登录和安全跨域访问。通过集成SAML协议,可以使网站具有单点登录的能力。

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="_bf2e7369-5db8-49b2-bfe1-a90cc0aa126e"
    Version="2.0"
    IssueInstant="2015-03-29T09:01:00Z"
    Destination="https://idp.example.org/SAML2/SSO/Redirect"
    AssertionConsumerServiceURL="https://sp.example.com/SAML2/SSO/POST">
  <saml:Issuer>https://sp.example.com/metadata</saml:Issuer>
</samlp:AuthnRequest>

五、单点登录的优点

1.减少用户的负担

用户只需要登录一次,就可以访问多个应用系统,在切换应用系统时不需要再次输入用户名和密码,大大减少了用户的负担。

2.提高用户体验

单点登录能够让用户快速便捷地访问多个应用系统,提高了用户的体验和效率,缩短了用户的等待时间,降低了用户的流失率。

3.降低开发成本

单点登录能够在多个应用系统中共用同一份身份信息,减少了开发和维护成本,提高了系统的整体性能和可维护性。

六、单点登录的缺点

1.安全风险

如果认证中心被攻击或者泄漏了票据信息,那么所有的应用系统都会受到威胁,造成很大的安全风险。

2.技术成本

实现单点登录需要一定的技术储备和成本投入,对于一些小型企业来说可能会有一定的难度。

3.限制性

单点登录只适用于需要进行身份验证的应用场景,对于一些不需要用户身份验证的应用来说,单点登录就没有什么作用。