单点登录:一把钥匙开启所有门

2024-03-19 03:20

本文主要是介绍单点登录:一把钥匙开启所有门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单点登录(SSO)技术,就像是一把开启企业数字化大门的钥匙,让用户一次登录,随处访问,极大地提升了工作效率和用户体验。具体到技术实现上,当用户首次登录时,SSO系统会进行认证,并发放一个凭证(如Token)。当用户尝试访问其他服务时,只需出示这个凭证,而无需再次输入账号密码。这不仅加快了工作流程,还大大减少了因记不住密码而导致的安全风险。

SSO解决方案

单点登录的核心在于:在多个应用系统中,用户只需进行一次登录认证,就可以无缝访问所有相互信任的应用系统。这背后需要一个独立的认证中心,通常称为Passport。

当用户首次尝试访问任一应用系统时,系统会将用户引导至Passport进行认证。一旦认证成功,Passport就会颁发一个令牌给用户。随后,用户携带这个令牌访问其他系统时,无需再次登录,系统会识别该令牌,并授予用户相应的访问权限。

这里会涉及同域名及不同域名两种方式:

  • • 同域名下的SSO:依托Cookie的域属性,可以实现同一个主域名下的各子域应用间共享token,从而实现单点登录。

  • • 跨域名的SSO:对于不同域的应用,可以通过建立一个独立的认证中心,使用令牌机制来实现单点登录。

  • 下图就是针对跨域名的SSO的流程:

图片

在技术实现上,单点登录可以借助如 CAS(Central Authentication Service)、OAuth、OpenID Connect 等标准协议,也可以基于企业内部的自定义协议实现。在整个流程中,要维护一个全局认可的信任票证(token),并通过集中式的认证服务中心来进行身份的统一管理和验证。 CAS(Central Authentication Service)和OAuth 2.0(Open Authorization)都是在网络应用中广泛使用的认证和授权协议。

OAuth 2.0 (Open Authorization)

OAuth 2.0是一个授权框架,允许第三方应用获取对用户资源的有限访问权限,而无需获取用户的凭证。OAuth 2.0更注重授权而非认证。

使用场景:OAuth 2.0广泛应用于互联网服务中,允许用户授权第三方应用访问他们存储在其他服务提供商上的信息,例如我们通过微信授权登录一个小程序或者应用。

工作流程:用户授权第三方应用访问自己在另一个服务上的资源时,该应用将获得一个访问令牌。该令牌允许第三方应用代表用户访问其资源。这个在微信开放平台、支付宝等都有相关接入说明及接口,大家可以去参考下。主要流程如下:

图片

1. 用户请求客户端应用程序访问资源。

2. 客户端应用向授权服务器请求授权。

3. 授权服务器要求用户提供认证。

4. 用户向授权服务器提供认证。

5. 如果认证成功,授权服务器将授权码发送给客户端应用。

6. 客户端应用使用授权码向授权服务器请求访问令牌。

7. 授权服务器向客户端应用发放访问令牌。

8. 客户端应用使用访问令牌向资源服务器请求资源。

9. 资源服务器向客户端应用提供资源。

10. 客户端应用将资源显示给用户。

CAS (Central Authentication Service)

CAS是一种单点登录(SSO)协议,旨在允许用户在多个应用程序间使用单一的认证过程登录。它专注于解决用户认证问题,而不涉及授权。

使用场景:CAS通常用于单一组织或紧密相关组织的内部应用中,提供集中式的用户认证服务。

工作流程:用户首次尝试访问应用时被重定向到CAS服务器进行认证。一旦认证成功,用户就可以无需再次登录即可访问其他集成了CAS的应用。一般公司级的应用都会采用这种方式。

图片

用户未登录访问 app1

1. 用户访问 app1 的受保护资源,app1 发现用户未登录,跳转至统一认证中心,并将自己的地址作为参数

2. sso 认证中心发现用户未登录,将用户引导至登录页面

3. 用户输入用户名密码提交登录

4. 统一认证中心校验用户信息,创建用户与 sso 认证中心之间的会话 TGC,同时创建 Token

5. 统一认证中心带着 Token 跳转最初 app1 的请求地址,浏览器缓存 TGC 及 Token

6. app1 拿到 Token,去统一认证中心校验 Token 是否有效

7. 统一认证中心校验 Token,返回有效

8. app1 使用该 token 创建与用户的会话,返回受保护资源

用户已登录 app1 再次访问 app1

1. 请求携带 Token,app1 请求认证中心确认 Token 是否有效

2. app1 返回受保护资源

用户登录 app1 后访问 app2

1. 用户访问系统 2 的受保护资源,未携带 app2 的 Token

2. app2 发现用户未登录,跳转至统一认证中心登陆页,并将自己的地址作为参数

3. 登陆页拿到 TGC,判断已经登录,跳转到 app2 页面

4. 请求统一认证中心通过 TGC 换取 Token

5. 统一认证中心校验后,返回 Token

6. app2 使用该 Token 创建与用户的局部会话,返回受保护资源

总结

通过实施SSO,企业可以极大地简化用户的登录流程,加强数据安全,提高工作效率。无论是采用CAS还是OAuth 2.0,关键在于选择最适合企业自身需求和现有架构的解决方案。

这篇关于单点登录:一把钥匙开启所有门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824624

相关文章

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件