【架构】统一认证中心的架构设计与实现(一)

news/2024/11/28 22:40:53/文章来源:https://www.cnblogs.com/o-O-oO/p/18575393
一、背景二、认证授权概念2.1 认证2.2 授权三、一些名词四、常见的认证方案4.1 JWT4.2 OAuth2五、SSO协议5.1 OpenID Connect5.2 SAML 2.05.3 CAS六、RBAC

一、背景

一般在一个公司内部可能有多个系统,比如OA,财务系统,CMS,ERP,营销系统,客服中心,项目管理系统,代码管理系统等等。

这些系统一般都有各自的用户体系,这意味着一些弊端:

使用者必须维护多个系统的账号密码,并且来回切换登录,非常不方便
对管理者来说,账号的管理,权限的分配等非常复杂,且不易维护

这就需要统一认证授权中心,也就是说,用户只需要一次登录,就可以访问各个系统,实现互联互通。

二、认证授权概念

2.1 认证

证明身份的合法性。

比如:

账号密码
手机号+短信验证码
电子邮箱
身份证
指纹,人脸等信息

以企业背景来说,认证就是判断此账号是否属于公司的合法账号

2.2 授权

当用户身份合法后,不代表此用户拥有操作系统的权限。

这时候就需要授权,授权就是将权限赋予用户所拥有的账号/角色。

授权过后,在用户使用账号进行登录时,需要进行鉴权操作,判断此用户是否具有符合访问某个系统或者访问某个功能的权限,比如一个运营人员是不允许访问财务系统的(运营人员的授权列表中并没有财务系统的授权)。

三、一些名词

IAM(Identity and Access Management ) : 身份认证和访问管理。

IDM(Identity Management System): 身份管理系统。

SSO(SingleSignOn):单点登录,用户只需要登录一次就可以访问所有相互信任的应用系统。

RBAC(Role-Based Access Control): 基于角色的访问控制。是一种权限模型。

四、常见的认证方案

4.1 JWT

HTTP协议是无状态的,这意味着我们无法通过HTTP访问来确认用户是否登录,有两种方案:

session
token

其中session方案,需要将session存储在服务端,并且需要cookie的配合,无法适应分布式场景以及客户端是手机端等这些无cookie的场景。

token方案就是登录成功后,服务端会下发一个令牌(token),客户端将token进行存储,这样访问资源时,将令牌token携带,服务端验证token有效性即可。

JWT是一种用于token生成的加密算法,是目前业界比较成熟的一种方案。

JWT字符串的组成:

A.B.C

通过.进行相连,其中A部分为Header,B部分为Payload,C部分为Signature

Header: header部分一般会包含两部分:

{"alg": "HS256","typ": "JWT"}

typ:token类型,这里一般为JWT
alg:签名算法,一般填写HS256
以BASE64加密json字符串,可以解密

Payload:可以添加需要传递的数据,比如用户id,还有几个默认的字段

{//默认字段"sub":"主题123",//自定义字段"name":"码神之路www.mszlu.com",
}
iss (issuer):签发人/发行人
sub (subject):主题
aud (audience):用户
exp (expiration time):过期时间
nbf (Not Before):生效时间,在此之前是无效的
iat (Issued At):签发时间
jti (JWT ID):用于标识该 JWT
自定义字段
以base64加密json字符串,可以解密,payload中不建议存放敏感数据

Signature: 签名,指定一个secret(秘钥),该secret需要保存起来,不让其他人知道,通过header中指明的加密算法,将上述header和payload进行加密,使用secret加盐,这就是签名

验证时,收到一个Header.Playload.Signature这样的字符串,用secret加密Header.Playload,如果得到的结果和Signature一样,则验证通过
签名同样是base64加密

4.2 OAuth2

OAuth2也是一种token认证方案,流程如下:

客户端(比如浏览器,手机APP等)
资源拥有者(用户)
认证服务器
资源服务器

认证流程:

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)授权认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

OAuth 2.0定义了四种授权许可类型:

1、Authorization Code:授权码

2、Implicit:隐式许可

3、Resource Owner Password Credentials:密码凭证

4、Client Credentials :客户端凭证

五、SSO协议

SSO就是单点登录,一次登录,可以访问所有受信应用,JWT和OAuth都可以实现单点登录。

5.1 OpenID Connect

简称OIDC,是基于OAuth2扩展出来的一个协议。OIDC 在 OAuth2.0 协议的基础上,提供了用户认证、获取用户信息等的标准实现。
OIDC 是完全兼容 OAuth2.0 的。

资源持有者(End User) :对应 OAuth中的Resource Owner
客户端(Relying Party): 对应OAuth中的Client
资源服务器(Resource Server)
认证服务器(OpenID Provider): 对应OAuth中的Auhtorization Server

1、RP(client)发送一个认证请求到 OpenID Provider(OP)。
2、OP对End User进行认证并获得相应的授权。
3、OP返回一个ID Token或者access Token给RP。
4、RP使用access token向UserInfo Endpoint请求用户信息。
5、UserInfo Endpoint返回相应的用户信息给RP。

ID Token就像是一个用户的身份证,它是以JWT格式存在的,并且由OP进行签名,保证它的安全性。

授权模式

授权码模式(Authorization Code):

授权码 + PKCE 模式(Authorization Code With PKCE):

客户端凭证模式(Client Credentials)

隐式模式(Implicit)

密码模式(Password)

设备代码模式(Device Code)

5.2 SAML 2.0

SAML协议全称为Security Assertion Markup Language,它是一个基于XML的标准协议。SAML标准定义了身份提供者(Identity Provider)和服务提供者(Service Provider)之间,如何通过SAML规范,采用加密和签名的方式来建立互信,从而交换用户身份信息。

SAML复杂性比较高,并不推荐使用。

5.3 CAS

CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法。

CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。

角色介绍:
CAS Client:负责提供资源,当资源受保护时需要用户进行身份认证时,重定向到CAS Server进行认证。

CAS Server:负责对用户的认证。

CAS有不同的版本,比如1.0,2.0,3.0,4.0等,认证流程基本一致,只是不同版本中,Server可以引入不同的认证机制(比如引入SAML,OAuth2等)。

认证流程大致为:

1、Client(终端用户)在浏览器里请求访问Web应用example;
2、浏览器发起一个GET请求访问example应用的主页https://www.example.com;
3、应用example发现当前用户处于未登陆状态,Redirect用户至CAS服务器进行认证;
4、用户请求CAS服务器;
5、CAS发现当前用户在CAS服务器中处于未登陆状态, 要求用户必须得先登陆;
6、CAS服务器返回登陆页面至浏览器;
7、用户在登陆界面中输入用户名和密码(或者其他认证方式);
8、用户把用户名和密码通过POST,提交至CAS服务器;
9、CAS对用户身份进行认证,若用户名和密码正确,则生成SSO会话, 且把会话ID通过Cookie的方式返回至用户的浏览器端(此时,用户在CAS服务端处于登陆状态);
10、CAS服务器同时也会把用户重定向至CAS Client, 且同时发送一个Service Ticket;
11、CAS Client的服务端收到这个Service Ticket以后,请求CAS Server对该ticket进行校验;
12、CAS Server把校验结果返回给CAS Client, 校验结果包括该ticket是否合法,以及该ticket中包含对用户信息;
13、至此,CAS Client根据Service Ticket得知当前登陆用户的身份,CAS Client处于登陆态。

CAS同样不推荐使用

虽然SAML和CAS不推荐使用,但做为统一认证授权中心的实现,需要考虑多种场景,同样应该给予实现(只是优先级不高)

目前SSO协议,最为推荐使用的为OIDC,也是目前事实上的SSO通用标准

六、RBAC

基于角色的访问控制(Role-based access control),指的是通过用户的角色(Role)授权其相关权限,这实现了更灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。

当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,授予他们不同角色。你可以授予给用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从授予的角色里面继承所需的权限。

以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有 Admin、Maintainer、Operator 三种角色,这三种角色分别具备不同的权限,比如只有 Admin 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。

原创 三石哥 IT有个圈儿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843125.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Listener内存马

概述 Listener是Java Web App中的一种事件监听机制,用于监听Web应用程序中产生的事件,例如,在ServletContext初始化完成后,会触发contextInitialized事件,实现了ServletContextListener接口的Listener就可以接收到事件通知,可以在内部做一些初始化工作,如加载配置文件,…

一种小资源情况下RDS数据实时同步StarRocks方案

使用一台4C8 G服务器轻松实现2个MySQL实例中通过负责分库分表规则之后的5000多张表的数据实时同步到StarRocks一、背景 目前需要将阿里云RDS数据库的数据同步到自建的StarRocks集群。之前使用DolphinScheduler通过定时调度Datax任务,将数据同步到StarRocks集群中,但是随着业务…

Elasticsearch常用查询及Kibana使用

Elasticsearch常用查询及Kibana使用 背景 搭建好Nginx => Filebeat => Logstash => Elasticsearch的日志获取通道后,通过jmeter配置产生10000条请求查看jmeter配置查看聚合报告Devtools工具进行查询查询reponseTime 90%,95%,99%分割线GET nginx-2024.11.28/_search…

Logstash安装及传输日志

Logstash安装及传输日志 Logstash安装按照官方文档安装启动logstash 方法1启动命令systemctl start logstash方法2 查看logstash启动配置先执行命令查看启动文件位置,可看出启动文件位置为/etc/systemd/system/logstash.servicesystemctl status logstash查看/etc/systemd/sys…

FileBeat安装及抽取Nginx日志

FileBeat安装及抽取Nginx日志 FileBeat安装按照官网指导安装,其他系统或版本可参考下载页面。此次测试FileBeat与nginx部署在同一台机器上。curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.25-linux-x86_64.tar.gz tar xzvf filebeat-7.17.…

jquery数字格式化分隔符插件

jquery-number-divider是一款jquery数字格式化分隔符插件。该数字格式化插件可以按指定格式对大数字进行分隔,可以指定分隔符,是一款简单实用的数字格式化插件。在线演示 下载 安装 可以通过bower来安装number-divider.js数字格式化插件。bower install number-divider …

MySQL底层概述—2.InnoDB磁盘结构

大纲 1.InnoDB磁盘结构 2.表空间(Tablespaces) 3.数据字典(Data Dictionary) 4.双写缓冲区(Double Write Buffer Files) 5.重做日志(redo log) 6.撤销日志(undo log) 7.二进制日志(binlog) 8.新版本结构演变1.InnoDB磁盘结构 (1)Tablespaces (2)Double Write Buffer (3)redo lo…

36. MySQL补充知识点

1. 视图 1.1 理论 [1] 什么是视图 视图是通过查询得到一张虚拟表,并保存下来,后续可以直接使用。 视图也是一张表。 在计算机科学中,视图(View)是一种虚拟表,其内容是一个或多个基本表的查询结果。 与基本表不同,视图不存储实际的数据,而是根据创建视图时的查询语句在…

车间工人违规行为智能识别方案

车间工人违规行为智能识别方案基于深度学习的视频分析系统,车间工人违规行为智能识别方案能够利用工业相机实时监测工人在生产线上的行为,系统不仅能够监测工人的操作行为,还能够监控整个生产流程。例如,它可以监测材料选择需要经过的环节数量,手动翻转的次数,以及上料动…

人员禁区闯入行为检测算法

人员禁区闯入行为检测算法通过现场监控相机捕捉监控区域内的实时图像,人员禁区闯入行为检测算法基于YOLOv7和CNN对图像进行分析,当检测到禁区闯入行为时,系统会立即触发告警。支持与第三方设备通信,发送开关量信号,以及将告警信息推送给后台值班人员。通过实时监控和快速响…

MySQL底层概述—1.InnoDB内存结构

大纲 1.InnoDB引擎架构 2.Buffer Pool 3.Page管理机制之Page页分类 4.Page管理机制之Page页管理 5.Change Buffer 6.Log Buffer1.InnoDB引擎架构 (1)InnoDB引擎架构图 (2)InnoDB内存结构(1)InnoDB引擎架构图 下面是InnoDB引擎架构图,主要分为内存结构和磁盘结构两大部分。(2)I…

[Vue] Watch and WatchEffect

WatchLet’s look at another simple example using our composition API. Here’s some code that has a simple search input box, uses the search text to call an API, and returns the number of events that match the input results. <template><div>Searc…