【云计算学习教程】统一身份认证(IDS)是什么?云端如何应用统一身份认证?

2023-05-16

以前去井冈山游玩,里面的每个景点都要单独排队购票,很烦琐。现在已改为通票,上山时只需购买一张通票,就可以直接进入任何景点游玩,在每个景点门口出示一下通票即可,一路畅通无阻,既方便又省时。

什么人可以进去、进去后可访问什么资源,以及事后承担什么责任,这是人类社会每天都在发生的事情,如景区参观、厂区上班等。

云端包含很多应用系统,而且租户的家目录还要漫游,统一身份认证就相当于景区的通票,登录云端时只需一次验证,之后就可以进入任何有权进入的应用系统。

统一身份认证与单点登录是同一个概念。如果没有统一身份认证,那么你进入任何一个应用系统都要求输入账号和密码,这样一方面难以记住众多的账号和密码,另一方面使用云端资源很烦琐。

对于云端应用系统的访问控制,通常分为三个层面:

  • 认证:解决能否进入的问题。
  • 授权:解决进入后能做什么的问题。
  • 记账:解决做了事情后就要承担相应责任的问题,可能还要付费。

这就是通常所说的 3A 安全机制(Authentication,Authorization,Accountability)。基于 3A 安全机制的访问控制在现代操作系统中被普遍采用,例如 Linux 操作系统访问控制步骤如下:

1)用户输入账号和密码企图登录系统,此时操作系统会进行认证(Authentication),即核对输入的账号和密码与保存在系统里的账号和密码是否相符。如果相符,则允许登录。

2)登录后的用户并不能为所欲为,其每一步操作都必须被授权(Authorization),比如允许进入什么目录、哪些文件允许读、哪些文件允许写、哪些文件允许删除等,都处于操作系统严密的监视之下。

3)用户的全部操作都被作为日志记录下来(Accountability),方便以后落实责任、事后监督,并作为付费的依据。

Windows 操作系统也采用相同的方法。

作为云端的统一身份认证系统,必须实现以下四个功能:

1)统一用户管理(Identification)

租户的账号、密码等信息集中存储,统一管理。

2)身份鉴别(Authentication)

当租户企图登录某个应用系统时,验证他的票据或者身份是否合法。

3)权限控制(Authorization)

规定允许登录系统的租户具备哪些操作权限。

4)操作日志登记(Accountability)

记录租户的操作行为,以便事后责任追溯。

有了统一身份认证,租户登录云端并访问应用系统的过程如图 1 所示。

租户登录云端并访问应用系统的过程
图 1 租户登录云端并访问应用系统的过程

租户甲首次登录云端的应用系统 5(第 1 步),但被告知要先去统一认证中心获取票据(第 2 步),拿到票据之后返回并访问应用系统 5(第 3 步),然后凭票据直接访问应用系统 3(第 4 步)、应用系统 2(第 5 步)、应用系统 1(第 6 步)。

租户在访问每个应用系统时,应用系统都会查验他的票据,只有票据合法才被允许进入。应用系统在查验票据时都会与统一认证中心确认,不过这一切都是自动的,租户自己感觉不到,但当租户企图访问没有被授权的应用系统时,就会被告知“没有权限”。

不管租户最先访问哪个应用系统,只要租户没有票据或者出示的票据已经过期,都会引导其先去统一认证中心获取票据。但需要注意的是,对租户来说,获取票据的动作只是在屏幕上输入账号和密码,账号和密码的验证、票据的发放等操作都在云端后台自动完成,此后该租户再访问其他应用系统时,就不会在屏幕上显示输入账号和密码的登录画面,因为云端后台自动帮他出示了合法的票据。

SOA(面向服务的架构)是什么?

SOA 是面向服务的架构,即企业的 IT 系统是由服务组成的,也即企业的各个应用系统是由许多标准的服务件“组装”起来的,组成应用系统中的各个服务之间是一种非常松耦合的关系。

服务基于简单的“问/答”模型——我问你问题,你给我答案,那么对于“我”来说,“你”就是“服务”。但是答案反馈有同步和异步之分,同步就是我问你问题并在线等待你答复,而异步就是我问完你问题就去忙其他事情了,你有了答案之后再通知我。

在软件行业,基于这种服务的编程思想最早表现为函数,即把经常用到的代码块定义成一个函数并取一个函数名,再用函数名替换程序中原先的代码块(称为函数调用)。

比如通过三条边计算三角形的面积,这个任务包含复杂的数学公式,涉及很多条指令,我们可以把它定义为函数 sane(x,y,z),然后在程序需要计算三角形面积时直接调用这个函数即可。比如 sane(10,20,25),就会返回边长为 10、20、25 的三角形的面积。

后来人们觉得函数还不够灵活,就提出了模块,模块比函数功能更强,程序就是由模块组装起来的。当然,编写具体的模块时会继续采用函数。模块本质上就是一组类库(一个类库文件包含若干定义好了的功能较为强大的函数),允许软件开发人员调用类库中的函数。

一些好的面向特定应用领域的模块以开源或者商业模式对外发布,世界各地的其他开发人员可以直接利用这些模块来开发自己的应用程序,从而减少大量重复性的代码编写工作,这样的模块人们习惯称之为框架。例如,利用 Python 语言开发网站的框架 Django,它就是一组类库,编程人员必须掌握需要用到的每个类库函数的定义,才能快速开发网站。

无论是函数还是模块,都要求在程序运行前“组装”好。一旦“组装”完成,函数或模块就静态地捆绑在一起了,所以人们还是觉得不够灵活,于是又提出了运行库的概念(关于运行库的介绍可参见《IT系统组成》教程)。

Gartner 公司在 1996 年进一步提出了 SOA 的概念,意为面向服务的架构,本质上是面向服务的思想在企业 IT 架构方面的应用。面向服务的思想,是面向对象思想之后的一种新的思想模式,其核心特征就是以松耦合、粗粒度的服务单元来构建软件。作为一种思想,SOA 不涉及任何具体的实现技术细节,但是思想终归要落地才会带来社会效益。

人们发现,企业服务总线(简称为 ESB)是实现 SOA 的主要技术之一,于是 ESB 也就成为 SOA 的核心技术基础。当然,不用 ESB 也不能说你的系统就不是 SOA,比如现在流行的微服务就是 SOA 的一种具体实现,它采用容器对服务打包。SOA 所实现产品的核心任务是管理企业中的服务单元,具体的任务可分解为:服务单元的登记、服务单元的调用、服务单元的运行、服务单元的部署、用户管理界面,以及安全控制等。

服务与模块的主要区别在于:模块相当于汽车发动机的零配件,而服务就相当于发动机本身,发动机可以独立运转,而零件就不行。

函数一般由开发语言编译器的公司提供,如 C 语言编译器有微软的 Visual C++、Borland 公司的 Borland C、开源组织提供的 GCC 等,框架一般由软件开发厂商或开源组织提供,如 Django、Drupal、JSON、Spring、jQuery 等,而服务一般由运营商提供。

企业的软件应用系统和服务的关系像极了人类社会中的项目和人的关系,企业要实施一个项目,先去人才网站招聘各种人员组建团队,然后团队成员各司其职,共同完成项目。

求职者事先要在人才招聘网站注册并发布简历,然后等待招聘电话。那么在 SOA 中,也有一个类似人才网站的机构,服务必须先在这个机构里注册,当有需求的时候,其他服务或者应用系统就会在这个机构里搜索能满足需求的服务,并且调用这些服务来完成某个任务。服务像孙悟空一样具备分身术,即同一个服务能分身出很多个体,这些个体分别被其他服务调用,这一点又与现实生活中的求职者不同。

服务是无状态的,即服务在被调用前后本身没有变化,且同一个服务允许同时在多台计算机上运行,这样就能轻松实现高可用性计算及负载均衡集群,示意图如图 1 所示。

SOA
图 1 SOA

最终我们可以想象一下,企业的很多台服务器上运行着各种各样的标准服务,众多的应用系统对应各自的服务调用关系描述表,“组装”一个应用软件由公司文员即可快速轻松地完成。

在云端,由于应用繁多且由一家公司运营,所以云运营公司是采用 SOA 的最佳场所。可以预计,在云计算时代,SOA 将得到广泛应用。在业界,也有人认为云计算将是 SOA 的终结者,这个观点把不同层次的东西混为一谈,云计算不是新的技术和思想,它只是人们使用计算资源的一种模式,而 SOA 是一种全新的软件构架思想。

ESB 是实现 SOA 的主要技术之一,SOA 是组建大型云端的重要思想之一。SOA 的概念已经提出了十几年,之前在传统的企业很难落地生根,根本原因就是一家企业的各种软件系统往往是由不同的软件公司开发的,而这些软件公司具备竞争关系,各自为政,很难协调一致地推出符合 SOA 标准的通用解决方案。

SOA 的实施就是以程序员的视角把公司的业务拆分成一个个服务标准件,然后再选择合适的标准件“组装”成各种应用软件系统。有了一定规模的服务标准件库后,“组装”应用系统就显得异常简单快捷了。在一个高度智能化的 SOA 环境中,“组装”本身也是自动化的。

一个公司的软件应用系统越多、越复杂,实施 SOA 就越有价值,因为每个服务标准件得到重复使用的概率就越高;相反,如果一个公司只有一个软件系统,而且以后也不会使用更多的应用系统,那么根本没必要采用 SOA。

“拆分”工作是实施 SOA 成功与否的关键,拆分视角、拆分原则和拆分粒度(服务标准件的大小)必须事先科学规划。最小的拆分粒度就是一个服务对应某种编程语言的一条语句,这时“组装”软件系统就是传统的软件开发,由软件开发工程师来完成;最大的拆分粒度就是一个应用系统对应一个服务,这时“组装”软件系统就是安装一个应用软件系统,由系统管理员来完成。

科学的拆分粒度介于这两种拆分粒度之间,拆分出来的服务标准件既具备一定的可重用性,又能大大简化“组装”程序的复杂性。通行的做法是,先在软件系统的传统“三层”分层结构的基础上,纵向划分出更多的层次,然后对每一层结合企业的业务特点横向划分出多个“块”,每个“块”完成少量的业务逻辑,这样的“块”就是一个服务标准件。拆分的过程是一个不断进化的动态过程,也是一个由粗粒度到细粒度不断演化的过程。

软件的传统“三层”分层结构是指展现层、业务逻辑层和数据层。为了理解它们,请看下面的例子。

王老师打开学校的考试网站,然后查看张宇法同学的“云计算”课程综合考评分数,屏幕上显示 89 分,如图 2 所示。

软件的传统“三层”分层结构
图 2 软件的传统“三层”分层结构

数据层里保存着原始的数据(比如平时成绩和期末成绩),业务逻辑层根据具体的业务要求对数据层里的数据进行加工处理(比如平时成绩按 30%、期末成绩按 70% 计算总评分数;学工处分配助学金时只看期末成绩,即平时成绩按 0%、期末成绩按 100% 计算),展现层决定以什么样式来显示业务逻辑层加工处理的结果(比如以白底黑字宋体 30 字号显示“89”)。

在设计数据层时,重点考虑库表结构;在设计业务逻辑层时,根据具体的业务要求编写加工处理算法;而在设计展现层时,重点考虑屏幕上的内容布局和显示样式。业务逻辑层本质上就是把数据层中的数据映射到展现层上,到底如何映射,与具体的业务有关。

在现实中,有的程序员喜欢使用存储过程把部分或全部的业务逻辑算法放入数据层,这样做有一个明显的缺点,即难以对系统做横向扩容来满足日益增长的用户访问量。因为数据层本身带有状态,对带有状态的系统扩容最常用的办法是纵向扩容,而纵向扩容比横向扩容成本更高、难度更大,因为纵向扩容目前的方法就是给单独的服务器增加更多的 CPU、内存等计算资源。

目前部署 SOA 的应用环境有开源产品和商业产品,开源产品有 WSO2、Dubbo 和 Mule ESB,后者侧重于企业服务总线,不是一个完整的 SOA 套件,这三个开源产品是用 Java 语言开发的,另外一个 ZATO 开源项目是采用 Python 语言开发的;商业产品有 Oracle SOA 套件和 IBM SOA 基础栈等。

微服务是什么?微服务的优缺点有哪些?

微服务是 SOA 的一个简化版本,并且是具体的实现技术,采用容器对服务打包,可以这样说,如果没有容器技术,微服务就发展不起来。我们都知道,传统的单体应用程序会随着功能的扩展变得越来越庞大,最后修改代码、版本升级或者重新部署都会变得异常困难,甚至根本无法进行。

微服务的出现就是用来解决这个问题的——把一个庞大的单体应用横向切割成若干个微服务,每个微服务只做一件事,但它仍然包含展现层、应用层和数据层。微服务单独运行,对外暴露 API 接口供其他程序调用。所以说,微服务侧重于替换企业内部的大型单体应用,以便于应用程序的可持续演进(持续代码完善、持续版本升级、持续缩放部署、DevOps)。

由于每个微服务都有自己的数据层,所以这个带有状态的微服务就很难跨应用调用。由于每个微服务只做一件事,所以复杂度大大降低;另外,微服务可以单独开发和部署;再者,微服务可以单独缩放扩容,这些都是优点。

但是微服务也存在不足之处:微服务之间的调用关系更复杂,数据一致性保证更复杂,总体微服务部署更复杂。一个典型的基于微服务的应用部署包括若干个微服务实例、API 网关、微服务注册机构及若干负载均衡器等。


转载于:http://c.biancheng.net/cloud_computing/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【云计算学习教程】统一身份认证(IDS)是什么?云端如何应用统一身份认证? 的相关文章

  • Java数字和日期处理:Java数字处理和日期类

    文章目录 本章学习要点 Java Math类的常用方法静态常量例 1 求最大值 最小值和绝对值例 2 求整运算例 3 三角函数运算例 4 指数运算例 5 Java生成随机数 xff08 random 和Random类 xff09 例 1例
  • Java内置的包装类

    文章目录 本章学习要点 Java包装类 装箱和拆箱装箱和拆箱包装类的应用1 实现 int 和 Integer 的相互转换2 将字符串转换为数值类型3 将整数转换为字符串 Java Object类详解toString 方法equals 方法例
  • Java输入/输出(I/O)流

    文章目录 本章学习要点 Java流是什么 xff1f 输入 输出流又是什么 xff1f 什么是输入 输出流输入流输出流 Java系统流例 1 Java字符编码介绍Java File类 xff08 文件操作类 xff09 详解获取文件属性例
  • Java异常处理

    文章目录 本章学习要点 Java异常 xff08 Exception xff09 处理及常见异常异常简介例 1 异常类型 Java中Error和Exception的异同例 1 Java异常处理机制及异常处理的基本结构Java try cat
  • Java注解

    文章目录 本章学习要点 Java注解 xff08 Annotation xff09 简介Java 64 Override注解Java 64 Deprecated注解Java 64 SuppressWarnings xff1a 抑制编译器警告
  • 如何夸人?

    文章目录 夸人要怎么夸到心坎上 xff1f 01 有理有据 xff0c 细节见诚意02 一如既往保持信任与支持03 由表及里 xff0c 夸TA前先夸自己04 先抑后扬 xff0c 对比式夸奖05 创造条件引导TA自夸 如何做一只舔狗 xf
  • Java继承和多态

    文章目录 本章学习要点 Java类的封装例 1 Java封装图书信息类Java继承 xff08 extends xff09 简明教程例 1 单继承继承的优缺点 Java super关键字详解super调用父类构造方法例1例2 super访问
  • java中接口(interface)详解

    分享记录一下java接口的博客 xff1a java中接口 xff08 interface xff09 详解 JAVA基础 接口 xff08 全网最详细教程 xff09
  • java引用详解

    文章目录 一 关于对象与引用之间的一些基本概念 new Vehicle Vehicle veh1二 Java对象及引用三 只有理解了对象和引用的关系 xff0c 才能理解参数传递总结 xff1a 什么是值传递 xff0c 什么是引用传递 为
  • python学习-def __init__(self)理解(1)

    python中 init 的作用 在python中创建类后 xff0c 通常会创建一个 init 方法 xff0c 这个方法会在创建类的实例的时候自动执行 实例1 实例化Bob这个对象的时候 xff0c init 方法会自动执行 xff1a
  • 学完java基础语法之后用来练习的不依赖框架的小项目

    刚学完一门语言基础语法之后 xff0c 一般都需要写一些小项目来检验我们的学习效果 xff0c 将所学的基础语法串联起来 xff0c 同时也熟悉一下用这门语言做项目的大概流程 但是此时学习的项目不能太复杂 xff0c 因此此时才刚学完基础语
  • java集合中接口和类的理

    一 背景 首先我们可以先了解一下类和接口的基础和使用方法 xff1a Java类和对象 java中接口 xff08 interface xff09 详解 Java继承和多态 然后再对java集合的基础了解一下 Java集合 泛型和枚举 有了
  • java多线程详解

    文章目录 多线程基础进程进程 vs 线程多线程 创建新线程线程的优先级练习小结 线程的状态小结 中断线程小结 守护线程练习小结 线程同步不需要synchronized的操作小结 同步方法小结 死锁死锁练习小结 转载于 xff1a https
  • Java项目管理工具Maven使用方法详解

    这边直接推荐两个比较好的教程 xff1a https www liaoxuefeng com wiki 1252599548343744 1309301178105890 http c biancheng net maven2 depend
  • maven引入依赖包,import依赖包,编译运行maven项目

    文章目录 IDEA中新建一个maven项目在pom xml中添加依赖包 xff0c 确定依赖包成功导入 xff0c 在项目中import依赖包怎么确定maven成功的导入了依赖包在项目中import导入的依赖包总结 在看这篇博客之前 xff
  • 怎样做一个好的PPT演讲

    文章目录 一 做好PPT演讲的重要性二 怎么做好PPT演讲1 做一个好的PPT2 做好演讲 三 分析一些比较好的PPT演讲视频四 实例解析和总结 一 做好PPT演讲的重要性 不管是在学生时期的竞赛展示 xff0c 毕业答辩 xff0c 我们
  • PPT怎么画出好看的三维示意图

    一 前言 之前一些博客已经大致讲了PPT怎么画图的 xff1a PPT画图文章总结 怎样做一个好的PPT演讲 其实对于我们平常在PPT中会出现的图片 xff0c 可以简单的分为二维示意图和三维示意图 xff0c 二维示意图制作起来相对简单
  • 为什么C++没有Python那么多开源库?

    链接 xff1a https www zhihu com question 375368576 answer 1059898195 看了好多回答 xff0c 还是觉得有更本质的原因的 xff0c 根源还是在C 43 43 这个语言特性上 为
  • 为什么C++没有C语言快?

    作者 xff1a 高性能架构探索 链接 xff1a https www zhihu com question 507790994 answer 2287288696 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xf
  • C/C++语言性能分析方法及性能分析工具的使用

    文章目录 一 从算法复杂度都程序性能一 事后统计的方法二 事前分析估算的方法三 求解算法的时间复杂度的具体步骤四 算法复杂度和程序性能之间的关系五 执行什么语句耗时 xff1f 不同语句执行时间量级分析整型加和减 xff1a 浮点型加和减测

随机推荐