各位老铁们,大家好,今天由我来为大家分享从普通登录到单点登录(SSO),以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
基于会话的身份验证是传统方法,并且已经使用了很长时间。但也存在一些缺点:
服务器负担很重。服务器需要为每个用户维护一个会话对象,这可能会导致服务器负载增加,并且在大规模应用中难以水平扩展。在分布式架构中,即当一个应用程序运行在多个服务器上时,用户可能会在不同的服务器上交替访问该应用程序,因此需要保证会话状态可以在服务器之间共享。不适用于无状态服务。对于像RESTful API 这样的无状态服务,基于令牌的身份验证更合适。
跨域认证
随着前后端开发模式的变化,前后端分离部署的可能性更大。前端静态资源部署在一台服务器上,后端API部署在另一台服务器上。这意味着前端登录需要跨域认证。跨域认证利用跨域请求进行身份认证。几种常见的跨域认证方案:
JSOP:只能用于跨域请求,不能用于认证。 CORS:可用于跨域请求和身份认证。然而,当多个业务系统调用同一个API服务下的接口时,随着业务系统数量的增长,后端开发人员需要频繁更改跨域配置,以使新开发的系统能够进行跨域请求。出现这种情况时,使用nginx反向代理将跨域控制权转移到前端是一个比较好的解决方案。 iframe场景下,使用localstorage进行跨域存储,通过postmessage和iframe跨域共享localstorage。但是,Safari 无法使用postMessage。您可以使用url 跨域共享本地存储。
基于令牌(token)的认证
为了解决分布式架构中的会话认证问题,可以使用基于令牌的认证。由于token只会存储在客户端,这样可以减轻服务器的负担,提高服务器的水平扩展能力。
基于令牌(token)的认证时序图
以下是基于token认证的时序图:
优势:
减轻服务器的负担。因为token只会存储在客户端,不会存储在服务器端。改进了服务器端水平扩展能力。因为服务器端水平扩展不再需要处理会话状态的同步逻辑。缺点:
已发行的令牌无法撤销。 Token包含有效期信息,在整个有效期内无法撤销,直至过期。单点退出是不可能的。如果使用token方式实现单点登录SSO功能,则很难实现单点登录SLO。由于单点注销涉及将用户从所有关联系统中注销,因此需要其他机制来实现此功能。以上是最基本版本的token认证方法。仍存在一些不足。主要用于讲解token认证的核心流程。为了避免上述缺点,需要配合其他机制(OAUTH部分将在下面深入解释)。
令牌(token)的生成
1. 标头
Header部分是描述JWT元数据的JSON对象,如下:
{ ‘alg’: ‘HS256’, ‘typ’: ‘JWT’}
alg表示签名算法,type表示token类型。最后,使用Base64URL算法将上述JSON对象转换为字符串。
2. 有效载荷
Payload部分是一个JSON对象,代表JWT实际传输的数据。官方定义了以下字段供选择:
{ ‘alg’: ‘HS256’, ‘typ’: ‘JWT’}
还可以自定义字段,最后使用Base64URL算法将上面的JSON对象转换为字符串。
3. 签名
签名部分是前两部分的签名,防止数据被篡改。公式如下:
HMACSHA256( base64UrlEncode(标头) + ‘.’ + base64UrlEncode(有效负载), 秘密)
Secret 是仅由服务器拥有的密钥。
单点登录(SSO)
用户只需登录一次即可访问多个关联系统,避免多次登录的麻烦。单点登录简化了登录流程,提升了用户体验。目前常见的实现方式有两种:CAS和OIDC。
CAS
CAS(中央身份验证服务)是一种用于实现单点登录SSO 的开源协议。它提供集中式身份验证服务器(CAS)。 CAS服务器负责用户登录和身份认证,并生成访问其他应用程序的票据。下图是CAS标准流程的时序图:
有几点需要注意:
CAS实现基于票据的单点登录。票证是一种身份验证凭证,与令牌有些不同。 CAS 包含两个票证:TGT 和ST。 TGT是长期有效凭证,用于获取短期ST凭证; ST 凭证用于验证特定服务的身份。
OIDC(OpenID Connect)
OAUTH 是一种在全球范围内广泛使用的授权协议。目前它的版本是2.0,但它并不是专门为单点登录SSO 设计的协议。 OIDC是基于OAUTH实现的身份认证协议。它是OAUTH的超集,可以实现单点登录功能。与CAS 不同,OIDC 是一种基于令牌的身份验证方法。
1.OAUTH2.0
OAUTH是一种授权协议,旨在解决能够使用同一帐户登录所有应用程序的问题。现在很多第三方应用都接入了微信登录,所以微信登录是一项主要的身份认证服务。所有接入微信登录系统的APP都可以直接使用微信账号登录。
1.1. OAUTH2.0原理
OAuth 2.0的运行流程如下所示,摘自RFC 6749。
认证服务器除了返回访问令牌之外,还返回刷新令牌。
access token:表示访问令牌。有效期短,解决了token无法撤销的问题。刷新令牌:代表更新令牌。有效期较长,用于获取access token。 2.OIDC
下图是在网上找到的一个基于token实现单点登录的时序图。虽然与标准OIDC流程有所不同,但也大致解释了基于令牌实现单点登录的流程。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/123768.html
用户评论
龙吟凤
以前每次换个网站都得重新登录,现在有了 SSO 简直爽歪!一个账号通行多个平台,太方便了!
有15位网友表示赞同!
寻鱼水之欢
这篇文章我受益匪浅啊,之前对 SSO 的了解还停留在表面,读完后真切体会到它的安全性优势和便利性真是绝了! 职场朋友们赶紧去看一看吧,这个时代已经离不开安全便捷的登录方式了!
有16位网友表示赞同!
蔚蓝的天空〃没有我的翅膀
虽然 SSO 比传统登录方便多了,但总觉得多了一个中间环节,万一系统出问题,登录就变成个麻烦事啊…
有12位网友表示赞同!
灼痛
这篇文章说的很全面,从需求出发分析 SSO 的作用和优点,再到具体的实现方式,读完之后感觉对 SSO 有一种更清晰的认识了。
有19位网友表示赞同!
烟花巷陌
我刚开始听说 SSO 时还以为它只是企业内部使用的,没想到现在越来越多的网站都用上了!看来将来单点登录已经成为了网络安全的新标准啊!
有5位网友表示赞同!
↘▂_倥絔
SSO 的优势确实挺明显,但实现起来也需要投入不少精力和成本,小型网站可能就难以实现吧?
有18位网友表示赞同!
孤城暮雨
我公司内部用的 SSO ,感觉挺好用的,一个账号管理全局,方便又提高了信息安全。 只是有些时候操作流程还是比较复杂,希望能更人性化一点…
有12位网友表示赞同!
弃我者亡
说的对啊! 单点登录可以有效减少密码泄露的风险,保护用户隐私和数据安全确实重要啊!
有8位网友表示赞同!
盲从于你
不过这篇文章好像忽略了一个问题,那就是 SSO 也带来了新的安全隐患,比如中央认证服务器一旦被攻击,就可能会导致整个系统的瘫痪… 我们需要认真考虑这个问题,避免打虎不防反咬人啊!
有8位网友表示赞同!
瑾澜
之前因为密码忘记经常找客服帮忙,现在有了 SSO 后真的省心很多! 一次登录就能通行所有网站,太棒了!
有12位网友表示赞同!
呆萌
这篇文章写得很好,很有逻辑性和条理性。 让我对单点登录(SSO)有了一个更加深入的理解,原来它不仅仅是提高用户体验的一个方式,还包含了很多安全和管理方面的考量…
有18位网友表示赞同!
你tm的滚
我公司正在考虑采用 SSO 系统,这篇博客提供了很好的参考信息,可以帮助我们更好地了解这个系统的优点和缺点。
有19位网友表示赞同!
可儿
从普通登录到单点登录,这真是一个划时代的进步啊!以前还要记住那么多密码,现在只有一个账号搞定所有网站的安全访问,真是太轻松了!
有12位网友表示赞同!
代价是折磨╳
个人觉得 SSO 的缺点是用户选择账号的时候,可能会比较混乱,毕竟需要记住每个平台的 SSO 服务提供商。 虽然SSO本身很便捷,但是多平台整合和管理确实会增加一些难度…
有20位网友表示赞同!
仅有的余温
对普通用户来说,理解 SSO 的原理并不容易,但这篇文章写的很通俗易懂,让我更容易理解这个概念。
有14位网友表示赞同!
把孤独喂饱
从普通登录到单点登录,是技术发展的必然趋势!安全可靠、便捷高效—这是SSO所带来的重大改变,未来将会在各个领域得到更广泛的应用。
有7位网友表示赞同!
稳妥
我一直认为 密码管理是个大问题,而 SSO 提供了一个很好的解决方案,希望更多网站都能重视这个方面的安全提升工作。
有10位网友表示赞同!
旧事酒浓
从普通登录到单点登录(SSO),这篇文章把我带回了网络发展的历程,想想当年需要记住这么多不同的账号密码,真的让人头疼
有7位网友表示赞同!