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

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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

Collection的所有的方法演示

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestCollection {/*** @param args* Collection的所有的方法演示* 此程序没有使用泛型,所以可以添加任意类型* 以后如果写到泛型会补充这一方面的内容*/public s

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

获取所有classpath指定包下类的所有子类

1.问题 开发过程中,有时需要找到所有classpath下,特定包下某个类的所有子类,如何做到? 2. 实现 比较常见的解决方案是自己遍历目录,查找所有.class文件。 下面这个方法使用spring工具类实现,简化过程,不再需要自己遍历目录 /*** 获取在指定包下某个class的所有非抽象子类** @param parentClass 父类* @param packagePat

为libpng不同架构创建构建目录、编译、安装以及合并库文件的所有步骤。

好的。既然你已经有了 libpng 的源代码,并且当前处在它的目录下,我们可以简化脚本,不再需要下载和解压源代码这一步。以下是修改后的脚本:```sh#!/bin/bash# 当前目录即 libpng 源代码目录LIBPNG_SRC_DIR=$(pwd)# 设置工作目录WORK_DIR=$(pwd)/libpng_buildBUILD_DIR_X86_64="$WORK_DIR/build

如何开启WinRM服务?

https://support.huaweicloud.com/vss_faq/vss_01_0179_04.html WinRM(Windows 远程管理,Windows Remote Management)是WEB服务管理在微软的Microsoft Windows中的实现,它允许处于一个共同网络内的Microsoft Windows计算机彼此之间互相访问和交换信息。在一台机器启用WinRM后