SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。
单点登录的优势是只要登录一次,就可以被所有相关系统识别,进入其他系统时无需再登录,避免了多次登录的问题,提高用户使用效率。
单点登录的缺点在于安全性,由于用户登录一次后即可进入所有系统,所以假如在某个环节登录凭证被泄漏,那么攻击者就可以进入所有系统窃取信息或者造成破坏,因此保障单点登录的安全性成为了重中之重。
这种方案适用于所有系统都是同一域名的子域名下,比如a系统域名是a.example.com,b系统的域名是 b.example.com ,两者都是example.com 的子域名。这个时候就可以通过将document.domain 设置成根域名,也就是example.com ,从而实现系统之间跨域访问cookie。
用户可在任意系统登录,当用户登录后,系统将登录凭证保存到cookie中,并通过前面所说的方式跨域共享cookie,此后用户再进入其他系统时,系统会将cookie里的登录凭证发给后端进一步验证,如果验证失败或者没有登录凭证则阻止进入系统。
优点
缺点:
针对第二点还可以通过加密等方式解决,但是第一点和第三点是硬伤。
单点登录的思路是首先有一个独立的认证中心,所有系统的登录都会重定向到该认证中心,只有认证中心能接受用户的用户名密码等安全信息,并对用户进行认证操作。当用户登录成功,认证系统会生成授权令牌,并让客户端携带着令牌跳转回最初的系统,该系统识别到令牌后将其发送到认证中心验证是否有效,若有效则登录成功。此后用户再进入系统2,系统2发现用户未登录,重定向到sso认证中心,认证中心返回授权令牌,系统2发送令牌到认证中心验证是否有效,若有效则登录成功。
这种思路想要实现需要解决几个问题: