OAuth2.0原理&SSO单点登录图解
一、单点登录SSO
1.概述
单点登录(全称Single Sign On,简称就是SSO)是一种身份验证和授权机制,它允许用户在多个相关但相互独立的系统或应用程序之间进行无缝切换,而无需重复登录。在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
2.SSO 的主要特点包括:
- 减少重复登录:用户只需一次登录,就可以访问所有受信任的应用和服务。
- 提高用户体验:简化了用户的访问流程,使用户操作更加便捷。
- 增强安全性:通过减少密码输入次数,降低了密码泄露的风险,并且可以统一管理用户身份认证。
- 集中式身份管理:企业可以集中管理用户账户和权限,简化了账户管理的复杂性。
3. SSO 的实现通常涉及以下几个关键组件:
- 身份认证服务器:负责处理用户的登录请求和身份验证。
- 服务提供商:用户访问的各个应用程序或服务,它们信任身份认证服务器的认证结果。
- 会话管理:一旦用户登录,会生成会话信息,该信息在用户访问其他服务时被共享。
4. SSO 的工作流程大致如下:
- 用户尝试访问受 SSO 保护的应用。
- 如果用户尚未登录,应用将重定向用户到身份认证服务器。
- 用户在身份认证服务器上输入登录凭据。
- 身份认证服务器验证用户凭据,如果成功,生成会话或令牌。
- 用户带着会话或令牌信息重定向回原始应用。
- 应用验证会话或令牌的有效性,并允许用户访问。
SSO 可以应用于多种场景,如企业内部多个业务系统的整合,或者多个服务提供商之间的用户访问。它通过提供一个统一的登录入口,简化了用户操作,同时提高了系统的安全性和可管理性。
5.两种情况SSO
(1)根域名相同:
1.浏览器也就是用户在访问一个网站时,网站会创建cookie并返回给用户并服务端会存有session,同时将session存入Redis缓存(根域名相同的系统一般Redis缓存相同);
2.当该用户访问根域名相同的其他系统时,会携带cookie(key),该系统会根据cookie的key去Redis缓存中找相关信息的session,有则响应成功,否则提醒用户登录。
(2)不同域名:
<访问两个相互信任的不同根域名的服务器,需要一个中间服务器sso。>
1.用户首次访问服务器A,服务器A提示未登录,就会重定向redirect(服务A的url)sso,并且携带来源ip;
2.重定向(携带cookie包含服务器A的url)到sso,告诉说需要登录,sso则返回login.html;
3.用户访问sso进行登录,登陆成功,然后sso创建全局的token,返回token并重定向回服务器A(因为重定向携带着cookie里A的url)。本地cookie有浏览器标识,根据这个 在sso就可查询到对应的token;
4.就会再次访问服务A,此时携带着全局的token,而服务A就会对这个token进行验证,向sso进行验证该token是否有效,如果有效,则验证成功,服务A也会创建局部的token :token_A返回给用户或者浏览器;
5.此时,用户去访问另一个服务B,提示未登录,重定向给sso,携带服务B的url;
6.请求就会带着cookie(浏览器标识,Burl)去重定向到sso,sso检查cookie发现对应token,已经登录过,就把token返回,重定向到服务器B;
7.此时请求带着token去访问服务B,服务B就向sso检查token是否有效,有效就颁发自己的token:token_B给客户端
全局token失效或者销毁的时候,就得通知局部token失效。
二、OAuth2.0授权协议
1.概述
OAuth 2.0是一个行业标准的授权协议,用于让第三方应用获取有限的访问权限,而无需暴露用户的用户名和密码。它主要用于:
- 授权:允许用户授权第三方应用访问他们在另一个服务上的资源,而不必共享他们的用户名和密码。
- 安全性:提供了一种安全机制,确保只有经过用户同意,第三方应用才能访问特定的资源。
- 灵活性:支持多种授权流程,适用于不同的应用场景,包括Web应用、桌面应用、移动应用和居住式应用。
2. OAuth 2.0 的核心概念包括:
- 资源所有者(Resource Owner):指拥有资源的用户。
- 客户端(Client):需要访问资源的第三方应用。
- 授权服务器(Authorization Server):负责认证用户身份并发放访问令牌给客户端的服务器。
- 资源服务器(Resource Server):存储用户资源的服务器,根据访问令牌提供资源访问。
- 访问令牌(Access Token):由授权服务器签发的一个字符串,代表用户授权给客户端的权限。
3. OAuth 2.0 的工作流程通常包括以下步骤:
- 客户端注册:在授权服务器上注册,获取客户端ID和客户端密钥。
- 用户授权:客户端引导用户至授权服务器请求授权。
- 授权响应:用户同意授权后,授权服务器重定向用户回客户端,并附带授权码code或访问令牌access_token。
- 获取访问令牌:客户端使用授权码code向授权服务器请求访问令牌access_token。
- 访问资源:客户端使用访问令牌access_token向资源服务器请求资源。
4. OAuth 2.0 定义了四种授权类型:
- 授权码授权(Authorization Code Grant):适用于有服务器端的Web应用。
- 隐式授权(Implicit Grant):适用于客户端JavaScript应用。
- 密码授权(Resource Owner Password Credentials Grant):适用于用户对客户端高度信任的情况。
- 客户端凭证授权(Client Credentials Grant):适用于服务器到服务器的通信。
OAuth 2.0被广泛应用于社交登录、API访问、单点登录等多种场景,它通过提供一个安全的授权机制,使得用户可以控制哪些应用可以访问他们的数据,同时也方便了开发者构建跨平台和跨应用的解决方案。
三、sso单点登录和OAuth2使用场景、关系以及区别
SSO(单点登录)和OAuth 2.0是两种在身份验证和授权领域中常用的技术,它们各自有不同的概念、使用场景以及它们之间的关系和区别。
关系:
SSO和OAuth 2.0都关注身份认证和授权,致力于提高安全性和用户体验,在实际应用中,可能会根据具体需求结合使用。
技术区别:
SSO是一种思想或解决方案,更侧重于提供单一登录凭证来优化用户体验,而OAuth 2.0是一个具体的协议,侧重于为第三方应用提供灵活的授权访问。此外,SSO通常用于内部系统的整合,而OAuth 2.0则广泛用于第三方应用与平台的集成。
在技术实现上,SSO可能需要解决集成复杂性和会话管理的技术挑战,而OAuth 2.0需要确保授权流程的安全性和有效管理访问令牌。在选择使用哪种机制时,需要考虑应用场景、安全性需求、用户体验等因素。
作用区别:
SSO(单点登录)是一种让用户只需登录一次就能访问所有相关系统或应用的机制。它通过中央认证服务器来验证用户身份,并在多个系统中共享会话或令牌,以此减少用户在多个系统间切换时需要重复登录的麻烦。SSO的优点包括提高用户效率、增强安全性和改善用户体验。它的实现方式通常涉及中央认证服务器和共享会话或令牌,适用于企业内部有多个相互关联的系统的场景。
OAuth 2.0是一个授权框架,用于为第三方应用程序提供对受保护资源的访问权限,而无需暴露用户的用户名和密码。它通过客户端请求授权,用户授权,然后客户端获取访问令牌的过程来工作。OAuth 2.0支持多种授权模式和范围,具有安全的授权流程,并且方便与外部应用的合作。
使用场景:
SSO主要适用于企业内部系统的整合,强调对资源的细粒度控制;而OAuth 2.0更广泛地应用于第三方应用与平台的集成,侧重于为第三方应用提供授权访问。此外,SSO关注于提供单一登录凭证,优化用户体验,而OAuth 2.0则侧重于灵活的授权模式和范围,保护用户的资源和隐私。