单点登录,是大型分布式系统中提升用户体验、和统一认证管理的核心系统,下面我就全面来详解单点登录以及原理@mikechen
单点登录
单点登录(SSO),是一种身份认证机制,允许用户在一个系统中登录后,而无需在每个系统中重复登录。
用户一次登录,访问多个系统,在各大厂互联网公司都有广泛的使用。
不仅如此,单点登录,还可以集中管理认证,提高安全性。
比如:通过集中认证和授权,可以更严格地实施安全策略(如:强密码、双因素认证)。
单点登录原理
单点登录的实现原理,依赖于身份认证中心(Identity Provider, IdP),如下图所示:
如上图,用户的身份认证,由统一的 SSO 认证服务处理,其他系统无需直接管理用户认证。
主要工作流程,如下:
首先,SSO登录。
用户访问业务系统(比如:应用 A),未登录时被重定向到认证中心。
在认证中心进行身份验证(输入用户名、密码,或使用多因素认证),认证成功后,创建统一会话。
其次,生成访问令牌
然后,认证中心,会根据用户的身份信息,生成 Token(访问令牌)。
访问令牌(Access Token), 是在身份验证和授权流程中颁发的一种凭证,用于标识客户端应用的访问权限。
访问令牌,通常由身份认证服务器生成,会携带用户的基本信息(如:用户 ID、角色…等等)。
然后,令牌会加密,并且,设置 Token 的有效期、和作用范围。
最后,将 Token 返回给用户、或客户端应用。
如下所示,令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiw
令牌通常带有数字签名,资源服务器,通过验证签名确保令牌未被篡改。
然后,验证令牌
系统接收到访问令牌后,开始验证“令牌”。
比如:
应用 A 收到 Token 后,向 SSO 认证中心的校验端点发送请求,验证 Token 的合法性、和有效性。
通过以下方式验证:
比如:使用认证中心的公钥验证 Token 签名。
或者,远程验证:调用认证中心的 Token ,验证接口检查 Token 的有效性。
验证成功后,用户被授予访问权限。
最后,可以访问别的系统
校验通过后,应用 A 根据 Token 中的用户信息(如:用户名、角色..等等),建立会话,并允许用户访问资源。
用户访问其他受保护应用时,自动携带认证令牌,无需再次登录。
单点登录应用场景
单点登录,适用于企业级、教育、金融、电商…等领域。
1.企业内部系统
比如:企业中的 HR 系统、OA 系统、ERP… 等,通过统一认证服务实现单点登录。
2.社交登录集成
提供第三方登录,比如: Google、Facebook…等功能的门户网站。
3.电子商务平台
主站与子站间统一认证,例如:淘宝、天猫….购物平台和论坛社区,都可以一次登陆后,无需重复登录。