用于提供基于云的身份和访问管理的系统、方法和介质与流程

文档序号:17429660发布日期:2019-04-17 03:19阅读:547来源:国知局
用于提供基于云的身份和访问管理的系统、方法和介质与流程

相关申请的交叉引用

本申请要求于2016年9月14日提交的序列号为62/394,273的美国临时专利申请和于2016年9月14日提交的序列号为62/394,345的美国临时专利申请的优先权。这些申请中的每一个的公开内容通过引用并入本文。

一个实施例一般涉及身份管理,尤其涉及云系统中的身份管理。



背景技术:

一般而言,基于云的应用(例如,企业公共云应用、第三方云应用等)的使用正在飞速发展,其中访问来自各种设备(例如,桌面和移动设备)以及各种用户(例如,员工、合作伙伴、客户等)。基于云的应用的丰富多样性和可访问性已经导致身份管理和访问安全性成为中心问题。云环境中的典型安全问题是未经授权的访问、帐户劫持、恶意的内部人员等。因而,需要安全地访问基于云的应用或位于任何地方的应用,而不管应用被何种设备类型或何种用户类型访问。



技术实现要素:

一个实施例是实现单点登录(“sso”)的基于云的身份和访问管理系统。实施例接收对被配置为允许访问应用的身份管理服务的第一请求。实施例将第一请求发送到第一微服务,该第一微服务通过生成令牌来执行身份管理服务。第一微服务至少部分地通过向sso微服务发送第二请求来生成令牌,该sso微服务被配置为跨基于不同协议的不同微服务提供sso功能。然后,实施例从第一微服务接收令牌并将令牌提供给应用,其中令牌允许访问应用。

一个实施例是实现单点登录(“sso”)的基于云的身份和访问管理系统。实施例接收对被配置为允许访问应用的身份管理服务的第一请求。实施例将第一请求发送到第一微服务,其中该第一微服务通过生成令牌来执行身份管理服务。第一微服务至少部分地通过向sso微服务发送第二请求来生成令牌,其中该sso微服务被配置为跨基于不同协议的不同微服务提供sso功能。sso微服务实现sso并生成包括全局状态并用于与不同的微服务进行通信的cookie。实施例接收sso的单点注销(“slo”),并使用cookie迭代地从应用注销,其中在从第一协议的应用的每次注销之后,执行到sso微服务的重定向以触发从不同协议的应用的注销。

附图说明

图1-图5是提供基于云的身份管理的示例实施例的框图。

图6是提供实施例的系统视图的框图。

图6a是提供实施例的功能视图的框图。

图7是实现云门的实施例的框图。

图7a是图示了实现云门的实施例中的主机标识符功能的框图。

图8图示了在一个实施例中实现多个租户的示例系统。

图9是实施例的网络视图的框图。

图10是一个实施例中的单点登录(“sso”)功能的系统架构视图的框图。

图10a图示了一个实施例中的sso运行时的示例框图。

图10b图示了一个实施例中的sso功能的示例状态和流程图。

图11是一个实施例中的sso功能的消息序列流程。

图12图示了一个实施例中的分布式数据网格的实例。

图13是根据实施例的身份和访问管理功能的流程图。

图14是图示了根据一个实施例的部件的各种功能和cookie传播功能的注销流程。

具体实施方式

实施例在身份云服务(“idcs”)中提供单点登录(“sso”)功能,该身份云服务提供多租户、云规模、身份和访问管理(“iam”)平台。在一个实施例中,sso功能是通过提供全局会话然后基于全局会话生成协议特定的令牌来实现的。实施例还通过使用cookie迭代地从多个应用注销并使用重定向来提供单点注销(“slo”)功能,从而安全信息不会存储在cookie上。

实施例提供实现基于微服务的架构的身份云服务,并提供多租户身份和数据安全管理以及对基于云的应用的安全访问。实施例支持对于混合云部署的安全访问(即,包括公共云和私有云的组合的云部署)。实施例保护云中和内部部署(on-premise)的应用和数据。实施例支持经由web、移动和应用编程接口(“api”)的多信道访问。实施例管理对于不同用户(诸如客户、合作伙伴和员工)的访问。实施例管理、控制和审计跨云以及内部部署的访问。实施例与新的和现有的应用和身份集成。实施例是水平可伸缩的。

一个实施例是在无状态中间层环境中实现多个微服务以提供基于云的多租户身份和访问管理服务的系统。在一个实施例中,每个被请求的身份管理服务被分解成实时任务和近实时任务。实时任务由中间层中的微服务处理,而近实时任务被卸载到消息队列。实施例实现由路由层和中间层消耗以强制实施用于访问微服务的安全模型的访问令牌。因而,实施例提供了基于多租户、微服务架构的云规模的iam平台。

一个实施例提供身份云服务,该服务使得组织能够为其新的商业计划快速开发高速、可靠和安全的服务。在一个实施例中,身份云服务提供许多核心服务,每个核心服务解决许多企业面临的独特挑战。在一个实施例中,身份云服务支持管理员例如进行用户的初始登入/导入、导入具有用户成员的组、创建/更新/禁用/启用/删除用户、将用户指派到组/从组中解除指派、创建/更新/删除组、重新设置密码、管理策略、发送激活等。身份云服务还支持最终用户例如修改简档、设置主要/恢复电子邮件、核实电子邮件、解锁其账户、改变密码、在忘记密码的情况下恢复密码等。

访问的统一安全性

一个实施例保护云环境中以及内部部署环境中的应用和数据。该实施例保护任何人从任何设备对任何应用的访问。由于两个环境之间的安全性不一致会导致较高的风险,因此该实施例提供跨两种环境的保护。例如,这种不一致会使销售人员即使在已经叛逃到竞争对手之后仍能继续访问其客户关系管理(“crm”)账户。因而,实施例将在内部部署环境中提供的安全控制扩展到云环境中。例如,如果人员离开公司,则实施例确保他们的账户在内部部署和云中都被禁用。

一般而言,用户可以通过许多不同的渠道(诸如web浏览器、台式机、移动电话、平板电脑、智能手表、其它可穿戴设备等)来访问应用和/或数据。因而,一个实施例提供跨所有这些渠道的安全访问。例如,用户可以使用他们的移动电话完成他们在台式机上开始的事务。

一个实施例还管理对于各种用户(诸如客户、合作伙伴、员工等)的访问。一般而言,应用和/或数据不仅可以由员工访问,而且可以由客户或第三方访问。虽然许多已知的系统在员工登入(onboarding)时采取安全措施,但是在向客户、第三方、合作伙伴等给予访问时一般不采取相同级别的安全措施,从而导致由未妥善管理的各方造成的安全漏洞的可能。但是,实施例确保为每种类型的用户的访问而不仅仅是员工的访问提供足够的安全措施。

身份云服务

实施例提供了作为多租户、云规模iam平台的idcs。idcs提供认证、授权、审计和联合(federation)。idcs管理对公共云上以及内部部署系统上运行的自定义应用和服务的访问。在替代或附加的实施例中,idcs还可以管理对公共云服务的访问。例如,idcs可用于跨这样的各种服务/应用/系统来提供sso功能。

实施例基于用于设计、构建和递送云规模的软件服务的多租户、微服务架构。多租户是指让服务的一个物理实现安全地支持多个客户购买该服务。服务是可以被不同客户端出于不同目的重用的软件功能或软件功能集合(诸如检索指定的信息或执行一组操作),以及控制该软件功能或该软件功能集合的使用的策略(例如,基于请求服务的客户端的身份)。在一个实施例中,服务是使得能够访问一个或多个能力的机制,其中访问是使用规定的接口而提供的并且与由服务描述指定的约束和策略一致地被实施(exercised)。

在一个实施例中,微服务是独立可部署的服务。在一个实施例中,术语微服务设想了软件架构设计模式,其中复杂应用由使用语言不可知的api彼此通信的小型独立进程组成。在一个实施例中,微服务是小的、高度解耦的服务,并且每个微服务可以专注于做一个小任务。在一个实施例中,微服务架构样式是将单个应用开发为一套小服务的做法,每个小服务在其自己的进程中运行并与轻量级机制(例如,超文本传输协议(“http”)资源api)通信。在一个实施例中,相对于执行全部或许多相同功能的单件式服务,微服务更容易更换。而且,每个微服务可以被更新而不会对其它微服务产生不利影响。相比之下,对单件式服务的一部分的更新会不期望地或无意地对单件服务的其它部分产生负面影响。在一个实施例中,微服务可以围绕其能力被有益地组织。在一个实施例中,微服务集合中的每一个微服务的启动时间远小于笼统执行那些微服务的所有服务的单个应用的启动时间。在一些实施例中,这种微服务中的每一个微服务的启动时间是大约一秒或更短,而这种单个应用的启动时间可以是大约一分钟、几分钟或更长。

在一个实施例中,微服务架构是指用于面向服务的架构(“soa”)的专业化(即,系统内任务的分离)和实现做法,以构建灵活的、独立可部署的软件系统。微服务架构中的服务是经网络彼此通信以便履行目标的进程。在一个实施例中,这些服务使用技术不可知的协议。在一个实施例中,服务具有小粒度并使用轻量级协议。在一个实施例中,服务是独立可部署的。通过将系统的功能分配到不同的小型服务中,增强了系统的内聚性并降低了系统的耦合度。这使得更容易随时改变系统以及向系统添加功能和质量。它还允许个体服务的架构通过不断的重构而出现,从而减少了对大型前期设计的需求,并且允许较早地并持续地发布软件。

在一个实施例中,在微服务架构中,应用作为服务的集合被开发,并且每个服务运行相应的进程并使用轻量级协议进行通信(例如,用于每个微服务的唯一api)。在微服务架构中,取决于要提供的服务,将软件分解成各个服务/能力可以以不同的粒度级别来执行。服务是运行时部件/进程。每个微服务是可以与其它模块/微服务交谈的自包含模块。每个微服务具有可以被其它微服务联系的未命名的通用端口。在一个实施例中,微服务的未命名的通用端口是微服务按照惯例暴露并允许同一服务内的任何其它模块/微服务与其交谈的标准通信信道(例如,作为常规的超文本传输协议(“http”)端口)。微服务或任何其它自包含的功能模块可以统称为“服务”。

实施例提供多租户身份管理服务。实施例基于开放标准,以确保易于与各种应用集成,从而通过基于标准的服务来递送iam能力。

实施例管理用户身份的生命周期,这需要确定和强制实施身份可以访问什么、谁可以被给予这种访问、谁可以管理这种访问等。对于不一定在云中的应用,实施例在云中运行身份管理工作负载并且支持安全功能。由实施例提供的身份管理服务可以从云购买。例如,企业可以从云购买这种服务以管理他们的员工访问他们的应用。

实施例提供系统安全性、大规模可伸缩性、最终用户可用性和应用互操作性。实施例解决了云的增长和客户对身份服务的使用。基于微服务的基础解决了水平可伸缩性需求,同时服务的仔细编排解决了功能需求。实现这两个目标需要(尽可能)分解业务逻辑以实现具有最终一致性的无状态性,而大多数不受实时处理影响的操作逻辑通过卸载到高度可伸缩的异步事件管理系统而转移为近实时,具有有保证的递送和处理。实施例从web层到数据层是完全多租户的,以便实现成本效率和系统管理的容易性。

实施例基于行业标准(例如,openidconnect、oauth2、安全断言标记语言2(“saml2”)、用于跨域身份管理的系统(“scim”)、具象状态传输(“rest”)等)以便于与各种应用集成。一个实施例提供了云规模api平台并实现了用于弹性可伸缩性的水平可伸缩微服务。该实施例充分利用云原理并提供具有每租户数据分离的多租户架构。该实施例还提供了经由租户自助服务的每租户定制。该实施例经由api可用于与其它身份服务的按需集成,并提供持续的特征发布。

一个实施例提供互操作性并充分利用对云中和内部部署的身份管理(“idm”)功能的投资。该实施例提供从内部部署轻量级目录访问协议(“ldap”)数据到云数据的自动化身份同步,反之亦然。该实施例在云和企业之间提供scim身份总线,并且允许混合云部署的不同选项(例如,身份联合和/或同步、sso代理、用户供应连接器等)。

因而,一个实施例是在无状态中间层中实现多个微服务以提供基于云的多租户身份和访问管理服务的系统。在一个实施例中,每个被请求的身份管理服务被分解成实时任务和近实时任务。实时任务由中间层中的微服务处理,而近实时任务被卸载到消息队列。实施例实现由路由层消耗以强制实施用于访问微服务的安全模型的令牌。因而,实施例提供了基于多租户、微服务架构的云规模的iam平台。

一般而言,已知的系统提供对由不同环境提供的应用(例如,企业云应用、合作伙伴云应用、第三方云应用和客户应用)的竖井式(siloed)访问。这种竖井式访问可能需要多个密码、不同的密码策略、不同的帐户供应和解除供应方案、全异的审计等。但是,一个实施例实现了idcs,以在这种应用上提供统一的iam功能。图1是具有idcs118的示例实施例的框图100,其提供了用于对用户和应用进行登入的统一身份平台126。该实施例跨各种应用(诸如企业云应用102、合作伙伴云应用104、第三方云应用110和客户应用112)提供无缝的用户体验。应用102、104、110、112可以通过不同的渠道(例如,由移动电话用户108经由移动电话106、由台式计算机用户116经由浏览器114等)来访问。web浏览器(通常称为浏览器)是用于检索、呈现和遍历万维网上的信息资源的软件应用。web浏览器的示例是mozillagooglemicrosoftinternet和apple

idcs118提供用户的应用、(经由身份平台126)跨设备和应用的统一安全凭证以及(经由管理控制台122)统一的管理方式的统一视图124。idcs服务可以通过调用idcsapi142来获得。这种服务可以包括例如登录/sso服务128(例如,openidconnect)、联盟服务130(例如,saml)、令牌服务132(例如,oauth)、目录服务134(例如,scim)、供应服务136(例如,scim或任何经多协议的传输(“atom”))、事件服务138(例如,rest)以及基于角色的访问控制(“rbac”)服务140(例如,scim)。idcs118还可以提供与所提供的服务相关的报告和仪表盘120。

集成工具

一般而言,大型公司通常在适当的位置具有iam系统以保护对其内部部署应用的访问。业务实践通常都是围绕内部iam系统(诸如来自oracle公司的“oracleiam套件”)成熟和标准化的。甚至中小企业通常也会通过简单目录解决方案(诸如microsoftactivedirectory(“ad”))来围绕管理用户访问设计其业务进程。为了启用内部部署集成,实施例提供了允许客户将其应用与idcs集成的工具。

图2是在云环境208中具有idcs202的示例实施例的框图200,其提供与内部部署206的ad204的集成。该实施例提供跨包括内部部署及第三方应用(例如,内部部署应用218和云208中诸如云服务210、云应用212、合作伙伴应用214和客户应用216的各种应用/服务)在内的所有应用的无缝用户体验。云应用212可以包括例如人力资本管理(“hcm”)、crm、人才获取(例如,来自oracle公司的oracletaleo云服务)、配置价格和报价(“cpq”)等。云服务210可以包括例如平台即服务(“paas”)、java、数据库、商业智能(“bi”)、文档等。

应用210、212、214、216、218可以通过不同的渠道(例如,由移动电话用户220经由移动电话222、由台式计算机用户224经由浏览器226等)来访问。该实施例提供经由云208和企业206之间的scim身份总线234从内部部署ad数据到云数据的自动化身份同步。该实施例还提供saml总线228,用于(例如,使用密码232)将来自云208的认证联合到内部部署ad204。

一般而言,身份总线是用于身份相关的服务的服务总线。服务总线为从一个系统到另一个系统传送消息提供平台。它是用于在可信系统之间交换信息的受控机制,例如,在面向服务的架构(“soa”)中。身份总线是根据基于标准http的机制(诸如web服务、web服务器代理等)构建的逻辑总线。身份总线中的通信可以根据相应的协议(例如,scim、saml、openidconnect等)。例如,saml总线是两个系统*之间基于http的连接,用于传送用于saml服务的消息。类似地,scim总线用于根据scim协议来传送scim消息。

图2的实施例实现身份(“id”)桥接器230,其是可以与客户的ad204一起下载并安装在内部部署206的小二进制文件(例如,1mb尺寸)。id桥接器230监听来自客户选择的组织单位(“ou”)的用户和组(例如,用户组),并将那些用户同步到云208。在一个实施例中,用户的密码232不同步到云208。客户可以通过将idcs用户的组映射到在idcs208中管理的云应用来管理用户的应用访问。每当用户的组成员资格在内部部署206被改变时,其对应的云应用访问自动改变。

例如,从工程转移到销售的员工可以几乎即时访问销售云并失去对开发者云的访问。当这种改变反映在内部部署ad204中时,云应用访问改变是近实时完成的。类似地,对于离开公司的用户,对在idcs208中管理的云应用的访问被撤销。为了完全自动化,客户可以通过例如ad联合服务(“ad/fs”或实现saml联合的某种其它机制)在内部部署ad204和idcs208之间设置sso,使得最终用户可以用单个公司密码332取得对云应用210、212、214、216以及内部部署应用218的访问。

图3是包括与图2中相同的部件202、206、208、210、212、214、216、218、220、222、224、226、228、234的示例实施例的框图300。但是,在图3的实施例中,idcs202提供与内部部署idm304(诸如oracleidm)的集成。oracleidm304是oracle公司提供iam功能的软件套件。该实施例提供跨包括内部部署和第三方应用在内的所有应用的无缝用户体验。该实施例经由云202和企业206之间的scim身份总线234从内部部署idm304到idcs208供应用户身份。该实施例还提供saml总线228(或openidconnect总线),用于将来自云208的认证联合到内部部署206。

在图3的实施例中,来自oracle公司的oracle身份管理器(“oim”)连接器302和来自oracle公司的oracle访问管理器(“oam”)联合模块306被实现为oracleidm304的扩展模块。连接器是具有关于如何与系统交谈的物理意识的模块。oim是被配置为管理用户身份(例如,基于用户应当和不应当访问的内容来管理不同系统中的用户账户)的应用。oam是提供访问管理功能的安全应用,访问管理功能诸如websso;身份上下文;认证和授权;策略管理;测试;记录;审计等。oam具有对saml的内置支持。如果用户在idcs202中有账户,则oim连接器302和oam联合306可以与oracleidm304一起使用,以创建/删除该账户并且管理来自该账户的访问。

图4是包括如图2和3中所示的相同部件202、206、208、210、212、214、216、218、220、222、224、226、234示例实施例的框图400。但是,在图3的实施例中,idcs202提供将云身份扩展到内部部署应用218的功能。该实施例提供跨包括内部部署和第三方应用在内的所有应用的身份的无缝视图。在图4的实施例中,scim身份总线234用于使idcs202中的数据与称为“云高速缓存”402的内部部署ldap数据同步。下面更详细地公开云高速缓存402。

一般而言,被配置为基于ldap进行通信的应用需要ldap连接。由于ldap需要在本地网络上,因此这种应用不能通过url建立ldap连接(不像例如连接到google的“www.google.com”)。在图4的实施例中,基于ldap的应用218作出到云高速缓存402的连接,并且云高速缓存402建立到idcs202的连接并随后在其被请求时从idcs202拉出数据。idcs202与云高速缓存402之间的通信可以根据scim协议来实现。例如,云高速缓存402可以使用scim总线234来向idcs202发送scim请求并作为回报接收对应数据。

一般而言,完全实现应用包括构建消费者门户、在外部用户群体上运行营销活动、支持web和移动渠道以及处理用户认证、会话、用户简档、用户组、应用角色、密码策略、自助服务/注册、社会整合、身份联合等。一般而言,应用开发人员不是身份/安全专家。因此,按需身份管理服务是期望的。

图5是包括与图2-图4中相同的部件202、220、222、224、226、234、402的示例实施例的框图500。但是,在图5的实施例中,idcs202按需提供安全身份管理。该实施例按需提供与idcs202的身份服务的集成(例如,基于诸如openidconnect、oauth2、saml2或scim的标准)。应用505(其可以是内部部署的、在公共云中或在私有云中)可以调用idcs202中的身份服务api504。由idcs202提供的服务可以包括例如自助服务注册506、密码管理508、用户简档管理510、用户认证512、令牌管理514、社会整合516等。

在这个实施例中,scim身份总线234用于使idcs202中的数据与内部部署的ldap云高速缓存402中的数据同步。另外,在web服务器/代理(例如,nginx、apache等)上运行的“云门(cloudgate)”502可以被应用505使用,以从idcs202获得用户websso和restapi安全性。云门502是通过确保客户端应用提供有效访问令牌和/或用户成功认证来保护到多租户idcs微服务的访问的部件,以便建立sso会话。云门502在下面进一步公开。云门502(类似于webgate/webagent的强制实施点)使得在被支持的web服务器后面运行的应用能够参与sso。

一个实施例提供sso和云sso功能。在许多组织中,用于内部部署的iam和idcs的一般入口点是sso。云sso使用户能够用单一用户登录来访问多个云资源。组织常常想要联合他们的内部部署的身份。因而,实施例利用开放标准来允许与现有sso集成,以保持和扩展投资(例如,直到进行了到身份云服务方法的完全最终过渡为止)。

一个实施例可以提供以下功能:

·维护身份存储库,以跟踪已被授权的用户帐户、所有权、访问和许可,

·与工作流程集成,以促进应用访问所需的各种审批(例如,管理、it、人力资源、法律和合规性),

·为选择性设备(例如,移动和个人计算机(“pc”))提供saas用户帐户,以访问包含许多私有和公共云资源的用户门户,

·促进周期性管理鉴证(attestation)审查,以符合法规和当前的工作职责。

除了这些功能之外,实施例还可以提供:

·云帐户供应,以管理云应用中的帐户生命周期,

·更健壮的多因素认证(“mfa”)集成,

·广泛的移动安全能力,以及

·动态认证选项。

一个实施例提供自适应的认证和mfa。一般而言,密码和质询问题被认为是不够的,并且易于受诸如网络钓鱼等常见攻击。如今的大多数商业实体都在寻求某种形式的mfa以降低风险。但是,为了被成功部署,解决方案需要由最终用户轻松供应、维护和理解,因为最终用户通常会抵制干扰其数字体验的任何事情。公司正在寻找安全地结合自带设备(“byod”)、社交身份、远程用户、客户和承包商的方式,同时使mfa成为无缝用户访问体验中几乎透明的部件。在mfa部署中,诸如oauth和openidconnect等行业标准对于确保现有多因素解决方案的集成和新型自适应认证技术的结合至关重要。因而,实施例将动态(或自适应)认证定义为在用户会话已经发起之后证明身份的可用信息(即,ip地址、位置、一天中的时间和生物测定)的评估。通过适当的标准(例如,开放认证(“oath”)和快速身份在线(“fido”))集成和可扩展身份管理框架,实施例提供了可以在it组织中被容易地采用、升级和集成的mfa解决方案,作为端到端安全iam部署的一部分。在考虑mfa和自适应策略时,组织必须在内部部署和云资源上实现一致的策略,这在混合idcs和内部部署iam环境中需要系统之间的集成。

一个实施例提供用户供应和证实(certification)。一般而言,iam解决方案的基本功能是启用和支持整个用户供应生命周期。这包括为用户提供适合于他们在组织内的身份和角色的应用访问、证实他们具有正确的持续访问许可(例如,当他们的角色或在其角色内使用的任务或应用随时间变化时),并且在他们离开组织时迅速地解除供应。这是重要的,不仅为了满足各种合规要求,而且还因为不适当的内部人员访问是安全漏洞和攻击的主要来源。身份云解决方案中的自动化用户供应能力不仅可以作为自己的重要组成部分,而且也可以作为混合iam解决方案的一部分,借此,对于当公司缩小规模、扩大规模、合并或指望将现有系统与iaas/paas/saas环境集成在一起时的过渡,idcs供应可以提供比内部部署解决方案更大的灵活性。idcs方法可以节省一次性升级的时间和精力,并确保必要的部门、分区和系统之间的适当集成。伸缩这项技术的需求常常在企业中悄然发现,并且跨企业立即递送可伸缩的idcs能力的能力可以提供灵活性、成本和控制方面的好处。

一般而言,随着她/他的工作改变,员工随着年限被授予附加的特权(即,“特权蠕变(creep)”)。受到轻度监管的公司一般缺乏要求管理人员定期审计员工的特权(例如,访问网络、服务器、应用和数据)以中止或减慢导致超级特权帐户的特权蠕变的“鉴证”处理。因而,一个实施例可以提供定期进行(至少一年一次)的鉴证处理。另外,随着并购,对这些工具和服务的需求将以指数形式增长,因为用户在saas系统上、内部部署、跨不同部门和/或正在被解除供应或重新分配。迁移到云会进一步使这种情况混乱,并且事情会迅速升级到超出现有的、常常是人工管理的证实方法。因而,一个实施例使这些功能自动化,并将复杂的分析应用于用户简档、访问历史、供应/解除供应和精细粒度赋权。

一个实施例提供身份分析。一般而言,能够将身份分析与iam引擎集成以进行全面证实和鉴证对于确保组织的风险简档至关重要。正确部署的身份分析可以要求全面的内部策略强制实施。在积极主动的治理、风险和合规性(“grc”)企业环境中,非常需要跨云和内部部署提供统一的单个管理视图的身份分析,并且可以帮助提供闭环处理以降低风险和满足合规性法规。因而,一个实施例提供客户端能够容易定制的身份分析,以适应管理者、主管人员和审计人员所需的用于报告和分析的具体行业需求和政府法规。

一个实施例提供自助服务和访问请求功能,以改进最终用户的体验和效率并降低服务台呼叫的成本。一般而言,虽然许多公司为员工部署了内部部署的自助访问请求,但是许多公司并没有在正式的公司范围之外充分扩展这些系统。除了员工使用,积极的数字客户体验增加商业信誉并最终有助于增加收入,并且公司不仅可以节省客户服务台呼叫和成本,而且还可以改进客户满意度。因而,一个实施例提供基于开放标准并且在必要时无缝地与现有访问控制软件和mfa机制集成的身份云服务环境。saas递送模式节省了以前投入于系统升级和维护的时间和精力,从而使专业it人员能够专注于更核心的业务应用。

一个实施例提供特权账户管理(“pam”)。一般而言,无论是使用saas、paas、iaas还是内部部署应用,每个组织都容易受到具有超级用户访问凭证的内部人员(诸如系统管理员、主管人员、人事主管、承包商、系统集成商等)对未经授权的特权账户的滥用的攻击。而且,外部威胁通常首先突破低级用户帐户,以最终到达并利用企业系统内的特权用户访问控制。因而,一个实施例提供pam,以防止这种未经授权的内部人员账户使用。pam解决方案的主要组成部分是可以以各种方式递送的密码保险库(valult),例如作为安装在企业服务器上的软件、作为同样企业服务器上的虚拟设备、作为打包的硬件/软件设备,或者作为云服务的一部分。pam功能类似于用于存储保存在信封中并定期改变的密码的物理保险箱,具有用于签入和签出的清单。一个实施例允许密码校验(passwordcheckout)以及设置时间限制、强制周期性改变、自动跟踪校验以及报告所有活动。一个实施例提供直接连接到所请求的资源而无需用户知道密码的方式。这个能力还为会话管理和附加功能铺平了道路。

一般而言,大多数云服务利用api和管理界面,其为渗入者(infiltrator)提供了绕过安全性的机会。因而,一个实施例在pam实践中考虑这些漏洞,因为向云的移动给pam带来了新的挑战。现在许多中小型企业都在管理他们自己的saas系统(例如,office365),而更大型的企业越来越多地拥有各自的业务单元,这些业务单元分别启动(spinningup)自己的saas和iaas服务。这些客户在身份云服务解决方案或其iaas/paas提供者身上发现自身具有pam能力,但在在处理这个责任方面经验不足。而且,在一些情况下,许多不同的地理位置分散的业务单元正试图将针对相同saas应用的管理责任隔离。因而,一个实施例允许客户在这些情况下将现有的pam链接到身份云服务的整体身份框架中,并且朝着更大的安全性和与确保伸缩到如业务需求规定的云负载要求的合规性移动。

api平台

实施例提供了将能力的集合作为服务来暴露的api平台。api被聚合到微服务中,并且每个微服务暴露api中的一个或多个。即,每个微服务可以暴露不同类型的api。在一个实施例中,每个微服务仅通过其api来进行通信。在一个实施例中,每个api可以是微服务。在一个实施例中,基于要由服务提供的目标能力(例如,oauth、saml、管理员等)将多个api聚合到该服务中。因此,类似的api不作为分开的运行时进程来被暴露。api使得可用于使服务消费者使用由idcs提供的服务。

一般而言,在idcs的web环境中,url包括三部分:主机、微服务和资源(例如,主机/微服务/资源)。在一个实施例中,微服务的特征在于具有特定的url前缀,例如“主机/oauth/v1”,其中实际的微服务是“oauth/v1”,并且在“oauth/v1”下有多个api,例如请求令牌的api:“主机/oauth/v1/令牌”、认证用户的api:“主机/oauth/v1/授权”等。即,url实现微服务,并且url的资源部分实现api。因而,在同一微服务下聚合了多个api。在一个实施例中,url的主机部分标识租户(例如https://tenant3.identity.oraclecloud.com:/oauth/v1/token")。

配置利用必要的端点与外部服务集成的应用以及保持该配置最新通常是一个挑战。为了应对这一挑战,实施例在众所周知的位置暴露公开的发现api,从那里应用可以发现关于它们为了消费idcsapi而需要的idcs的信息。在一个实施例中,支持两个发现文档:idcs配置(其包括idcs、saml、scim、oauth和openidconnect配置,例如在<idcs-url>/.well-know/idcs-configuration)和行业标准openidconnect配置(例如,<idcs-url>/.well-known/openid-configuration)。应用可以通过配置有单个idcsurl来检索发现文档。

图6是在一个实施例中提供idcs的系统视图600的框图。在图6中,各种应用/服务602中的任何一个可以对idcsapi进行http调用,以使用idcs服务。这种应用/服务602的示例是web应用、本机应用(例如,被构建为在具体操作系统上运行的应用,诸如windows应用、ios应用、android应用等)、web服务、客户应用、合作伙伴应用或者由公共云提供的任何服务(诸如软件即服务(“saas”)、paas和基础设施即服务(“iaas”))。

在一个实施例中,需要idcs服务的应用/服务602的http请求经过oracle公共云big-ip应用604和idcsbig-ip应用606(或类似技术,诸如负载均衡器,或者实现适当的安全规则以保护流量的被称为云负载均衡器即服务(“lbaas”)的部件)。但是,请求可以以任何方式被接收。在idcsbig-ip应用606(或者如适用的,诸如负载均衡器或云lbaas的类似技术),云供应引擎608执行租户和服务编排。在一个实施例中,云供应引擎608管理与正在登入到云中的新租户或由客户购买的新服务实例相关联的内部安全工件(artifact)。

然后,http请求由实现安全门(即,云门)的idcsweb路由层610接收,并提供服务路由以及微服务注册和发现612。取决于所请求的服务,http请求被转发到idcs中间层614中的idcs微服务。idcs微服务处理外部和内部http请求。idcs微服务实现平台服务和基础设施服务。idcs平台服务是分开部署的基于java的运行时服务,其实现了idcs的业务。idcs基础设施服务是分开部署的运行时服务,其为idcs提供基础设施支持。idcs还包括基础设施库,基础设施库是作为由idcs服务和共享库使用的共享库打包的公共代码。基础设施服务和库提供平台服务用于实现其功能所需的支持能力。

平台服务

在一个实施例中,idcs支持标准认证协议,因此idcs微服务包括诸如openidconnect、oauth、saml2、用于跨域身份管理的系统++(“scim++”)等的平台服务。

openidconnect平台服务实现标准的openidconnect登录/注销流程。交互式的基于web的本机应用充分利用标准的基于浏览器的openidconnect流来请求用户认证,从而接收是传达用户经认证的身份的javascript对象标记(“json”)web令牌(“jwt”)的标准身份令牌。在内部,运行时认证模型是无状态的,从而以主机httpcookie(包括jwt身份令牌)的形式维护用户的认证/会话状态。经由openidconnect协议发起的认证交互被委托给可信sso服务,该服务为本地和联合登录实现用户登录/注销仪式(ceremony)。下面参考图10和11公开这个功能的更多细节。在一个实施例中,根据例如openid基础(foundation)标准来实现openidconnect功能。

oauth2平台服务提供令牌授权服务。它提供了丰富的api基础设施,用于创建和验证传达进行api调用的用户权限的访问令牌。它支持一系列有用的令牌授予类型,从而使客户能够安全地将客户端连接到他们的服务。它实现了标准的双参与者(2-legged)和三参与者(3-legged)oauth2令牌授予类型。支持openidconnect(“oidc”)使得兼容的应用(oidc中继方(“rp”))与作为身份提供者(oidcopenid提供者(“op”))的idcs集成。类似地,将idcs作为oidcrp与社交oidcop(例如,facebook、google等)集成使得客户能够允许对应用进行基于社交身份策略的访问。在一个实施例中,根据例如互联网工程任务组(“ietf”)请求注解(“rfc”)6749来实现oauth功能。

saml2平台服务提供身份联合服务。它使得客户能够基于saml身份提供者(“idp”)和saml服务提供者(“sp”)关系模型与其合作伙伴建立联合协议。在一个实施例中,saml2平台服务实现标准saml2浏览器post登录和注销简档。在一个实施例中,根据例如ietf、rfc7522来实现saml功能。

scim是用于自动化身份域或信息技术(“it”)系统之间的用户身份信息交换的开放标准,如由例如ietfrfc7642、7643、7644提供的。scim++平台服务提供身份管理服务,并使客户能够访问idcs的idp特征。管理服务暴露覆盖身份生命周期、密码管理、组管理等的无状态rest接口(即,api)集合,从而将这些工件作为web可访问的资源来暴露。

所有idcs配置工件都是资源,并且管理服务的api允许管理idcs资源(例如,用户、角色、密码策略、应用、saml/oidc身份提供者、saml服务提供者、密钥、证实、通知模板等)。管理服务充分利用和扩展scim标准,以便为所有idcs资源上的创建、读取、更新、删除和查询(“crudq”)操作实现基于模式的restapi。此外,用于管理和配置idcs自身的所有idcs内部资源都作为基于scim的restapi暴露。对身份存储库618的访问被隔离到scim++api。

在一个实施例中,例如,scim标准被实现,以管理如由scim规范定义的用户和组资源,而scim++被配置为使用由scim标准定义的语言来支持附加的idcs内部资源(例如,密码策略、角色、设置等)。

管理服务在需要的地方利用标准scim2.0核心模式和模式扩展来支持scim2.0标准端点。此外,管理服务还支持若干个scim2.0兼容端点扩展,以管理其它idcs资源,例如用户、组、应用、设置等。管理服务还支持远程过程调用样式(“rpc样式”)rest接口集合,其不执行crudq操作,而是代替地提供功能服务,例如“userpasswordgenerator”、“serpasswordvalidator”等。

idcs管理api使用oauth2协议进行认证和授权。idcs支持常见的oauth2场景,诸如用于web服务器、移动和javascript应用的场景。对idcsapi的访问受访问令牌的保护。为了访问idcs管理api,应用需要通过idcs管理控制台将应用注册为oauth2客户端或idcs应用(在这种情况下,oauth2客户端是自动创建的)并被授予期望的idcs管理角色。在进行idcs管理api调用时,应用首先从idcsoauth2服务请求访问令牌。在获取令牌之后,应用通过将访问令牌包括在http授权报头中来将访问令牌发送给idcsapi。应用可以直接使用idcs管理restapi,或者使用idcsjava客户端api库。

基础设施服务

idcs基础设施服务支持idcs平台服务的功能。这些运行时服务包括:事件处理服务(用于异步处理用户通知、应用预订和数据库审计);作业调度程序服务(用于调度和执行作业,例如,立即执行或在配置的时间执行不需要用户干预的长时间运行的任务);高速缓存管理服务;存储管理服务(用于与公共云存储服务集成);报告服务(用于生成报告和仪表盘);sso服务(用于管理内部用户认证和sso);用户界面(“ui”)服务(用于托管不同类型的ui客户端);以及服务管理器服务。服务管理器是oracle公共云和idcs之间的内部接口。服务管理器管理由oracle公共云发布的命令,其中命令需要由idcs实现。例如,当客户在云商店购买东西之前先注册账户时,云会向idcs发送要求创建租户的请求。在这种情况下,服务管理器实现了云预期idcs支持的特定于云的操作。

idcs微服务可以通过网络接口(即,http请求)调用另一个idcs微服务。

在一个实施例中,idcs还可以提供允许使用数据库模式的模式服务(或持久性服务)。模式服务允许将管理数据库模式的责任委托给idcs。因而,idcs的用户不需要管理数据库,因为存在提供该功能的idcs服务。例如,用户可以使用数据库以每个租户为基础来持久化模式,并且当数据库中没有更多的空间时,模式服务将管理获得另一个数据库和增加空间的功能,使得用户不需要必须自己管理数据库。

idcs还包括数据存储库,这些数据存储库是idcs所需/生成的数据储存库,包括身份存储库618(存储用户、组等)、全局数据库620(存储由idcs使用以配置自身的配置数据)、操作模式622(提供每个租户的模式分离并且以每个客户为基础来存储客户数据)、审计模式624(存储审计数据)、高速缓存集群626(存储高速缓存的对象,以加速性能)等。所有内部和外部idcs客户经基于标准的协议与身份服务进行集成。这使得能够使用域名系统(“dns”)来解决将请求路由到何处,并且使得消费应用与对身份服务的内部实现的理解解耦。

实时任务和近实时任务

idcs将所请求服务的任务分离成同步实时任务和异步近实时任务,其中实时任务仅包括用户继续前进所需的操作。在一个实施例中,实时任务是以最小延迟执行的任务,而近实时任务是在后台执行、无需用户等待它的任务。在一个实施例中,实时任务是基本上没有延迟或以可忽略的延迟被执行的任务,并且对于用户而言几乎是瞬间执行的。

实时任务执行具体身份服务的主要业务功能。例如,当请求登录服务时,应用发送消息以认证用户的凭证,并作为回报获得会话cookie。用户体验到的就是登录系统。但是,结合用户的登录可以执行若干其它任务,诸如验证用户是谁、审计、发送通知等。因而,验证凭证是实时执行的任务,使得用户被给予开始会话的httpcookie,但是与通知(例如,发送电子邮件以通知创建账户)、审计(例如,跟踪/记录)等相关的任务是可以异步执行的近实时任务,这样用户可以以最少的延迟继续前进。

当接收到针对微服务的http请求时,对应的实时任务由中间层中的微服务执行,而剩余的近实时任务(诸如不必实时处理的操作逻辑/事件)被卸载到消息队列628,消息队列628支持具有有保证的递送和处理的高度可伸缩的异步事件管理系统630。因而,某些行为被从前端推送到后端,以使idcs能够通过减少响应时间中的等待时间来向客户提供高级服务。例如,登录处理可以包括凭证的验证、日志报告的提交、最后登录时间的更新等,但是这些任务可以被卸载到消息队列并且近实时地而不是实时地执行。

在一个示例中,系统可能需要注册或创建新的用户。系统调用idcsscimapi,以创建用户。最终的结果是,当用户在身份存储库618中被创建时,用户得到包括重置他们的密码的链接的通知电子邮件。当idcs接收到注册或创建新用户的请求时,对应的微服务查看操作数据库(位于图6中的全局数据库620中)中的配置数据,并确定“创建用户”操作被标记有“创建用户“事件,这在配置数据中被识别为异步操作。微服务返回给客户端并且指示用户的创建成功完成,但是通知电子邮件的实际发送被推迟并被推送到后端。为了这样做,微服务使用消息传送api616将消息在作为存储库的队列628中排队。

为了从队列628中出队,作为基础设施微服务的消息传送微服务在后台连续地运行并且扫描队列628,以在队列628中查找事件。队列628中的事件由事件订户630处理,诸如审计、用户通知、应用订阅、数据分析等。取决于由事件指示的任务,事件订户630可以与例如审计模式624、用户通知服务634、身份事件订户632等通信。例如,当消息传送微服务在队列628中发现“创建用户”事件时,它执行对应的通知逻辑并向用户发送对应的电子邮件。

在一个实施例中,队列628将由微服务614公布的操作事件以及由管理idcs资源的api616公布的资源事件排队。

idcs使用实时高速缓存结构来增强系统性能和用户体验。高速缓存自身也可以作为微服务提供。idcs实现弹性高速缓存集群626,其随着idcs所支持的客户数量的伸缩而增长。高速缓存集群626可以利用下面更详细公开的分布式数据网格来实现。在一个实施例中,只写资源绕过高速缓存。

在一个实施例中,idcs运行时部件向公共云监视模块636公布健康和操作度量,公共云监视模块636从公共云(诸如来自oracle公司的oracle公共云)收集这种度量。

在一个实施例中,可以使用idcs来创建用户。例如,客户端应用602可以发布创建用户的restapi调用。管理服务(614中的平台服务)将调用委托给用户管理器(614中的基础设施库/服务),该用户管理器进而在id存储库618中的特定于租户的id存储条带中创建用户。在“用户创建成功”时,用户管理器在审计模式624下审计对审计表的操作,并向消息队列628公布“identity.user.create.success”事件。身份订户632拾取事件并向新创建的用户发送“欢迎”电子邮件,包括新创建的登录细节信息。

在一个实施例中,可以使用idcs向用户授予角色,从而导致用户供应动作。例如,客户端应用602可以发布授予用户角色的restapi调用。管理服务(614中的平台服务)将该调用委托给角色管理器(614中的基础设施库/服务),该角色管理器在id存储库618中特定于租户的id存储条带状授予用户角色。在“角色授予成功”时,角色管理器在审计模式624下审计对审计表的操作,并向消息队列628公布“identity.user.role.grant.success”事件。身份订户632拾取事件并评估供应授权策略。如果在角色被授予时存在活动的应用授予,则供应订户执行某种验证、发起帐户创建、调出目标系统、在目标系统上创建帐户并将帐户创建标记为成功。这些功能中的每一个可以导致对应事件的公布,诸如“prov.account.create.initiate”、“prov.target.create.initiate”、“prov.target.create.success”或“prov.account.create.success”。这些事件可以具有其自己的聚合过去n天内在目标系统中创建的帐户数量的业务度量。

在一个实施例中,idcs可以用于用户登录。例如,客户端应用602可以使用所支持的认证流之一来请求用户的登录。idcs对用户进行认证,并且在成功时在审计模式624下审计审计表中的操作。在失败时,idcs在审计模式624下审计失败,并在消息队列628中公布“login.user.login.failure”事件。登录订户拾取事件、更新其用于用户的度量,并确定是否需要执行对用户的访问历史的附加分析。

因而,通过实现“控制反转”功能(例如,改变执行流程以在稍后时间安排操作的执行,使得操作在另一个系统的控制下),实施例使得附加的事件队列以及订户能够被动态添加,以便在部署到更广泛的用户基础之前针对小的用户样本测试新功能,或者处理针对具体的内部或外部客户的具体事件。

无状态功能

idcs微服务是无状态的,这意味着微服务本身不维持状态。“状态”是指应用为了执行其功能而使用的数据。idcs通过将所有状态持久化到idcs数据层中特定于租户的储存库中来提供多租户功能。中间层(即,处理请求的代码)不具有与应用代码存储在相同位置的数据。因而,idcs在水平和垂直方面都具有高度的可伸缩性。

垂直伸缩(或扩大/缩小)意味着向系统中的单个节点添加资源(或从中移除资源),通常涉及将cpu或存储器添加到单个计算机。垂直可伸缩性允许应用扩大到其硬件的极限。水平伸缩(或扩大/缩小)意味着向系统中添加更多节点(或从中移除节点),诸如将新计算机添加到分布式软件应用。水平可伸缩性允许应用几乎无限地伸缩,仅受网络提供的带宽量限制。

idcs的中间层的无状态使得仅通过增加更多的cpu就可以水平伸缩,并且执行应用的工作的idcs部件不需要具有运行特定应用的指定物理基础设施。idcs中间层的无状态使得idcs具有高度的可用性,即使在向大量客户/租户提供身份服务时也是如此。每次通过idcs应用/服务都只关注cpu使用情况来执行应用事务本身,而不使用硬件来存储数据。伸缩是通过在应用运行时添加更多的片(slice)来完成的,而用于事务的数据存储在持久层上,在那里在需要时可以添加更多的副本。

idcsweb层、中间层和数据层可以各自独立地和分开地进行伸缩。web层可以伸缩,以处理更多的http请求。中间层可以伸缩,以支持更多的服务功能。数据层可以伸缩以支持更多的租户。

idcs功能视图

图6a是一个实施例中的idcs的功能视图的示例框图600b。在框图600b中,idcs功能堆栈包括服务、共享库和数据存储库。服务包括idcs平台服务640b、idcs高级服务650b和idcs基础设施服务662b。在一个实施例中,idcs平台服务640b和idcs高级服务650b是分开部署的、实现idcs的业务的、基于java的运行时服务,而idcs基础设施服务662b是分开部署的、为idcs提供基础设施支持的运行时服务。共享库包括idcs基础设施库680b,该idcs基础设施库680b是作为由idcs服务和共享库使用的共享库被打包的公共代码。数据存储库是idcs所需/生成的数据储存库,包括身份存储库698b、全局配置700b、消息存储库702b、全局租户704b、个性化设置706b、资源708b、用户瞬态数据710b、系统瞬态数据712b、每租户模式(受管理的exadata)714b、操作存储库(未示出)、高速缓存存储库(未示出)等。

在一个实施例中,idcs平台服务640b包括例如openidconnect服务642b、oauth2服务644b、saml2服务646b和scim++服务648b。在一个实施例中,idcs高级服务包括例如云sso和治理(governance)652b、企业治理654b、authn中介656b、联合中介(broker)658b和私人帐户管理660b。

idcs基础设施服务662b和idcs基础设施库680b提供idcs平台服务640b完成其工作所需的支持能力。在一个实施例中,idcs基础设施服务662b包括作业调度程序664b、ui666b、sso668b、报告670b、高速缓存672b、存储装置674b、服务管理器676b(公共云控制)和事件处理器678b(用户通知、应用订阅、审计、数据分析)。在一个实施例中,idcs基础设施库680b包括数据管理器api682b、事件api684b、存储api686b、认证api688b、授权api690b、cookieapi692b、密钥api694b和凭证api696b。在一个实施例中,云计算服务602b(内部nimbula)支持idcs基础设施服务662b和idcs基础设施库680b的功能。

在一个实施例中,idcs为idcs服务的消费者提供各种ui602b,诸如客户最终用户ui604b、客户管理ui606b、devops管理ui608b和登录ui610b。在一个实施例中,idcs允许应用(例如,客户应用614b、合作伙伴应用616b和云应用618b)的集成612b和固件集成620b。在一个实施例中,各种环境可以与idcs集成,以支持其访问控制需求。这种集成可以由例如身份桥622b(提供ad集成、wna和scim连接器)、apache代理624b或msft代理626b提供。

在一个实施例中,内部和外部idcs消费者经基于标准的协议628b(诸如openidconnect630b、oauth2632b、saml2634b、scim636b和rest/http638b)与idcs的身份服务集成。这使得能够使用域名系统(“dns”)来解决将请求路由到何处,并且使得消费应用与理解身份服务的内部实现解耦。

图6a中的idcs功能视图还包括公共云基础设施服务,其提供idcs为了用户通知(云通知服务718b)、文件存储(云存储服务716b)以及用于devops的度量/警告(云监视服务(em)722b和云度量服务(graphite)720b)而依赖的常见功能。

云门

在一个实施例中,idcs在web层中实现“云门”。在一个实施例中,云门是通过web服务器插件来实现的,web服务器插件使web应用能够将用户sso外部化到身份管理系统(例如,idcs),类似于与企业idm堆栈一起工作的webgate或webagent技术。在一个实施例中,云门充当保护对idcsapi的访问的安全守卫。在一个实施例中,云门由web/代理服务器插件实现,该插件提供用于基于oauth保护http资源的web策略实施点(“pep”)。在一个实施例中,云门还执行认证(例如,oauth认证)。

在一个实施例中,可以部署云门来保护单租户应用或多租户应用,并且可以将云门部署在代理模式前端不同类型的应用中。在一个实施例中,云门通过使用<租户>(表示什么租户拥有云门实例)和<主机标识符>(表示正在访问什么应用)相应的默认配置来支持单租户和多租户应用。在一个实施例中,本地配置为这些工件指定默认值,并且可以通过由路由层提供的http报头在每个请求的基础上被重写。例如,对于多租户应用,<租户>定义了云门的租赁,用于在联系idcs服务器时构建idcs服务url,并且可以在每个请求的基础上被可选的x-resource-identity-domain-name报头重写,该报头包括<租户-名称>(例如,“acme”)。进一步地,对于多租户应用,<主机标识符>定义cookie域,并且用于管理本地会话cookie,并且可以在每个请求的基础上被由客户端或路由层提供的可选“主机”报头(例如“acme.pcs1.dc4.oraclecloud.com”)重写。

在一个实施例中,为每个租户部署云门的一个实例。然而,在替代实施例中,例如,在提供复制和故障转移的高可用性服务器集群中,可能存在为租户部署的云门的多个实例。在一个实施例中,云门提供了多租户模式,该模式(例如当“基础设施”云门位于idcs自身前面(而不是租户的应用的前面)时)允许单个云门实例支持多个租户,并且在将来自多个租户的请求传递给idcs服务之前处理这些请求。

在一个实施例中,云门通过根据传递给它的请求的报头值确定特定租户来支持多租户。云门替代了各种url中的租赁,并使用url查找特定于应用/主机的策略。云门将这些策略应用于请求,并使用该信息将请求传递给idcs的适当部件。

在一个实施例中,传入请求中指出的租户不被替换(即,传入请求不被修改),而是用于云门自身向idcs服务作出的请求(例如,策略查找、凭证验证等)中。在一个实施例中,为云门供应了idcs服务的url,并且这些url可以具有租户的占位符(例如,“http://%tenant%.idcs.oracle.com”)或者可以指出云门的租户。在该实施例中,占位符或云门的租户被传入请求中指出的租户替换,使得云门使用传入请求中所指定的租户向idcs服务作出请求。

例如,云门可能正在保护企业云中的备审(docketing)应用。该应用可以属于正在被请求的idcs服务(例如,可以是idcs开发的应用,例如租户专用或用户专用管理控制台),或者可以是idcs的租户开发的。对应于idcs的相应租户的多个客户可以使用该备审应用。当客户需要访问该应用时,它向idcs发送请求,并且在请求的报头中指出客户的租赁。云门根据该请求推断租赁,并查找需要针对该租赁应用的特定策略。然后,云门将策略应用于该请求,并且如果策略允许请求通过,则云门断言租赁,并允许请求到达备审应用。在一个实施例中,云门通过向请求添加具有租户名称的报头来断言租赁,然后将请求转发到源服务器。在一个实施例中,云门可以以这种方式仅断言一些租户,并且其他租户的报头可能已经存在于请求中或者可能已经由先前的负载均衡服务器添加。

在一个实施例中,策略规定是否允许对通过请求端点标识的特定资源的访问,以及允许什么特定的访问方法取得对资源的访问。例如,在一个实施例中,“/admin/v1/httpauthenticator”是用于验证基于浏览器的http基本认证的用户凭证的端点,在这种情况下资源是凭证验证服务。例如,在一个实施例中,租户的公开访问策略可以指出该租户中的任何人都可以访问资源(例如,“/ui/v1/sign”(该资源是登录页面的公开可见端点)、“/ui/v1/pwdmustchange”和“/ui/v1/resetpwd”,用于密码更改和重置页面等)。当租户的公开访问策略指出该租户中的任何人都可以访问资源时,云门允许来自该租赁的访问该资源的任何请求通过。另一个策略可能要求用户需要提供用户名和密码以便(例如,基于基本认证)访问资源,并且对照身份对用户名和密码进行验证。进一步策略可能需要基于oauth的基于令牌的认证,在这种情况下,资源需要用户或编程应用提供oauth访问令牌来取得对后端中资源的访问。例如,用户可以发起openid流程以取得oauth访问令牌来取得对资源的访问,或者客户端应用可以通过提前取得令牌并且然后提供令牌及其凭证来取得对资源的访问,从而获得对资源的编程访问。

在一个实施例中,在由云门管理的文件中指定策略。在一个实施例中,文件存储在云门本地。在替代或附加实施例中,文件可以存储在idcs内的服务器侧(例如,在策略存储库中)。

图7是实现云门702的实施例的框图700,云门702在web服务器712中运行并充当被配置为使用开放标准(例如,oauth2,openidconnect等)与idcs策略决定点(“pdp”)集成的策略实施点(“pep”),同时保护对应用的web浏览器和restapi资源714的访问。在一些实施例中,pdp在idcs的oauth和/或openidconnect微服务704处实现。

在图7的实施例中,程序或应用客户端708可以尝试访问受云门702保护的资源714,或者最终用户710可以在其计算机上使用web浏览器706来访问受云门702保护的资源714。在一个实施例中,云门702可以实现用于保护资源714的不同功能,这取决于最终用户710或编程应用客户端708是否正在访问资源714。

在一个实施例中,当用户浏览器706向idcs发送用户710的登录的请求时,对应的idcspdp验证凭证,然后决定凭证是否充足(例如,是否请求诸如第二密码之类的进一步的凭证)。在图7的实施例中,云门702既可以充当pep,也可以充当pdp,因为它具有本地会话。在一个实施例中,云门通过处理策略实施和确定必须如何(或是否)认证用户来充当pep,而由pdp处理实际认证。在一个实施例中,如果(例如经由“公开”策略)不需要认证,或者如果存在云门的会话cookie并且可以执行验证cookie来代替验证凭证,则云门可以充当pdp。

例如,在一个实施例中,为了访问资源714,用户710可以在浏览器706中键入相应的url。浏览器706将用户710带到web服务器712。然后,云门702加载相应的策略。如果策略指出资源714受到保护,则云门702发起任何所需的认证处理。在一个实施例中,云门702不直接质询(challenge)用户(即,它不负责任何ui),但是一旦用户被质询以便进行认证,云门702就验证用户凭证(例如,用于基本认证(basicauth))。例如,当用户710输入他们的用户名和密码时,云门702将用户名和密码发送到idcs中的对应微服务704(例如,oauth2)以认证用户710。如果认证成功执行,则云门702允许用户710访问资源714。

在一个实施例中,云门702充当http基本认证认证器,从而针对idcs验证http基本认证凭证。这种行为在无会话和基于会话(本地会话cookie)模式下均受支持。在这种情况下,不创建服务器侧的idcs会话。对于http基本认证,云门702将http“未授权”状态代码返回给浏览器,作为响应,浏览器显示提示输入用户名/密码的对话框。这些凭证被提交给云门702,云门702针对idcs对它们进行认证。

在一个实施例中,对于根据oauth的认证,云门702返回http重定向状态代码,该http重定向状态代码将浏览器引导到oauth微服务,该微服务与sso微服务一起处理实际登录流程,包括在浏览器中显示登录页面和认证用户提供的凭证。在基于web浏览器的用户访问期间,云门702充当发起用户认证流程的oidcrp718。如果用户710没有有效的本地用户会话,则云门702将用户重定向到sso微服务并且与sso微服务一起参与oidc“授权码”流程。该流程以递送jwt作为身份令牌结束。云门708验证jwt(例如,查看签名、到期、目的地/受众等)并且为用户710发布本地会话cookie。它充当会话管理器716,该会话管理器716保护web浏览器访问受保护的资源以及发布、更新并验证本地会话cookie。它还提供了用于移除其本地会话cookie的注销url。

例如,在一个实施例中,为了访问受云门702保护的资源714,编程应用客户端708向web服务器712作出对应的请求,并且应用客户端708与该请求一起发送oauth令牌。云门702接收令牌并连接到oauth服务704以对照oauth2服务704验证oauth令牌。一旦令牌被验证,云门702就允许应用客户端708访问受保护资源714。

在一个实施例中,应用客户端708可以在(例如,由管理员执行的)预注册处理中取得令牌。在预注册处理中,应用客户端708在idcs中将自身注册为被允许访问受保护资源714的可信应用。令牌可以由idcsoauth微服务生成。

作为一次部署的一部分,云门702作为oauth2客户端向idcs注册,从而使其能够针对idcs请求oidc和oauth2操作。其后,它根据请求匹配规则(如何匹配url,例如,通配符、正则表达式等)来维护关于应用的受保护资源和不受保护资源的配置信息。可以部署云门702以保护具有不同安全策略的不同应用,并且受保护的应用可以是多租户的。

在restapi客户端708的编程访问期间,云门702可以充当应用的受保护的restapi714的oauth2资源服务器/过滤器720。它检查具有授权报头和访问令牌的请求的存在。当客户端708(例如,移动装置、web应用、javascript等)呈现(由idcs发布的)访问令牌以与受保护的restapi714一起使用时,云门702在允许访问api(例如,签名、到期、受众等)之前验证访问令牌。原始访问令牌未经修改就被传递。

图7a是图示云门702b如何处理主机标识符的示例框图700b。每个主机标识符表示与受云门702b保护的应用相关联的逻辑web域。在图7a的示例实施例中,路由层即服务(“rtaas”)704b接收的url的通用格式是:

https://<tenant>.<service>.<dc>.oraclecloud.com/<resource>

在起始处标识租赁(<tenant>),然后标识服务(<service>)、数据中心(<dc>)、根域(<oraclecloud.com>),在结尾处标识资源api端点(<resource>)。在一个实施例中,在请求处理期间的运行时,云门702b使用由客户端或路由层(即rtaas704b)经由“主机”报头提供的主机标识符。如果没有来自路由层的主机标识符可用,或者没有找到匹配,则云门702b从其自己的“<默认主机标识符>”构建主机标识符。在一个实施例中,idcs路由层可以为应用使用多于一个的主机标识符,并且在相应主机标识符的上下文中处理通过云门702b的每个请求,包括对本地会话cookie的范围界定和对访问策略文件的解析。例如,当云门702b接收到url时,它查看对应的主机标识符并确定需要应用什么策略。

在一个实施例中,rtaas704b具有多个物理web代理,每个代理具有在rtaasidcs帐户708b中定义的物理云门702b。每个web代理及其对应的云门702b支持多个虚拟主机(例如,1至30000之间数量的虚拟主机)。每个虚拟主机代表由rtaas704b指派的每个服务实例706b的web层。关于每个请求,rtaas704b设置具有虚拟主机的名称的报头(例如,“coke.docs.dc4.oraclecloud.com”、“pepsi.mcs.dc4.oraclecloud.com”、“intel.pcs.dc4.oraclecloud.com”等)。在一个实施例中,云门702b处的会话cookie被限定为虚拟主机的范围,并且实现了适当的重新进入功能。例如,云门702b可以在“redirect_uri”端点714b上接收az代码以设置cookie,并且可以在“logout_uri”端点712b上接收清除cookie的请求。

在一个实施例中,每个物理云门实例暴露在为该云门实例注册的oauth简档中定义的对应的固定“redirect_uri”端点714b和对应的固定“logout_uri”端点712b。uri用于云门702b和oidc之间的交互。在一个实施例中,oidc针对请求源自的云门的已知重定向uri来验证“redirect_uri”参数。在一个实施例中,就比较字符串值而言,匹配不必“精确”,但是无论匹配算法如何,匹配都必须满足它是云门的相同物理实例的条件。在一个实施例中,“logout_uri”保存在idcs710b中作为各个云门的注册oauth简档的一部分,并且该云门在其任何交互中不将“logout_uri”传递给服务器。当完全构建时,假设“redirect_uri”和“logout_uri”包括租户模板,并且在被相应的云门702b和oidc使用之前被转化。

在一个实施例中,云门702b和idcs服务器710b之间的交互将物理云门702b和主机标识符的组合视为一个逻辑oauthrp。在由云门702b向idcsoidc微服务发起的操作中,以及由idcsoidc微服务向云门702b发起的操作中,主机标识符经由“x-host-identifier-name”查询字符串参数被发送。当云门702b调用登录/注销请求时,云门702b从其从客户端或路由层接收到的主机标识符报头发送主机标识符查询字符串参数。当跟踪idcsoidc微服务所创建的请求cookie中的rp时,主机标识符查询字符串参数的值对于每个rp保存在请求cookie中。当idcsoidc微服务调用rp的“redirect_uri”和“logout_uri”时,idcsoidc微服务从保存在请求cookie中的主机标识符值发送主机标识符查询字符串参数。

一般而言,oauth用于生成客户端身份传播令牌(例如,指示客户端是谁)或者用户身份传播令牌(例如,指示用户是谁)。在这些实施例中,云门中oauth的实现基于jwt,jwt定义用于web令牌的格式,如由例如ietf、rfc7519提供的。

当用户登录时,发布jwt。jwt由idcs签署,并支持idcs中的多租户功能。云门验证由idcs发布的jwt以允许idcs中的多租户功能。因而,idcs在物理结构中以及在支撑安全模型的逻辑业务处理中提供多租赁。

租赁类型

idcs指定三种类型的租赁:客户租赁、客户端租赁和用户租赁。客户或资源租赁指定idcs的客户是谁(即,正在为谁执行工作)。客户端租赁指定哪个客户端应用在试图访问数据(即,哪个应用正在做工作)。用户租赁指定哪个用户在使用该应用来访问数据(即,由谁来执行工作)。例如,当专业服务公司为仓储俱乐部提供系统集成功能并使用idcs为仓储俱乐部系统提供身份管理时,用户租赁与专业服务公司对应,客户端租赁是用于提供系统集成功能的应用,并且客户租赁是仓储俱乐部。

这三种租赁的分离和识别在基于云的服务中启用多租户功能。一般而言,对于安装在内部部署的物理机器上的内部部署软件,由于用户需要在机器上物理地登录,因此不需要指定三种不同的租赁。但是,在基于云的服务结构中,实施例使用令牌来确定谁在使用什么应用来访问哪些资源。这三种租赁由令牌编码,由云门强制实施并由中间层的业务服务使用。在一个实施例中,oauth服务器生成令牌。在各种实施例中,令牌可以与除oauth以外的任何安全协议结合使用。

解耦用户、客户端和资源租赁为idcs提供的服务的用户提供了实质性的业务优势。例如,它允许服务提供者了解业务(例如,医疗保健业务)的需求和他们的身份管理问题,以购买idcs提供的服务、开发消费idcs的服务的自己的后端应用,并向目标业务提供后端应用。因而,服务提供者可以扩展idcs的服务,以提供其期望的能力并将那里能力提供给某些目标业务。服务提供者不需要构建和运行软件来提供身份服务,而是可以代替地扩展和定制idcs的服务以适应目标业务的需求。

一些已知的系统仅解决了客户租赁这单一的租赁。但是,这种系统在处理由用户(诸如客户用户、客户的合作伙伴、客户的客户端、客户端本身或者客户委托访问的客户端)的组合进行的访问时是不足够的。在实施例中定义和强制实施多种租赁促进对这各种用户的身份管理功能。

在一个实施例中,idcs的一个实体不同时属于多个租户;它只属于一个租户,而“租赁”是工件存活的地方。一般而言,存在实现某些功能的多个部件,并且这些部件可以属于租户,或者它们也可以属于基础设施。当基础设施需要代表租户行事时,它代表租户与实体服务进行交互。在那种情况下,基础设施本身具有它自己的租赁,并且客户具有其自己的租赁。在提交请求时,请求中可以涉及多种租赁。

例如,属于“租户1”的客户端可以执行用于获得让“租户2”指定“租户3”中的用户的令牌的请求。作为另一个示例,存在于“租户1”中的用户可能需要在由“租户2”拥有的应用中执行动作。因此,用户需要去“租户2”的资源名称空间并为他们自身请求令牌。因而,授权的委托通过识别“谁”可以对“谁”做“什么”来完成。作为又一个示例,为第一组织(“租户1”)工作的第一用户可以允许为第二组织(“租户2”)工作的第二用户有权访问由第三组织(“租户3”)托管的文档。

在一个示例中,“租户1”中的客户端可以请求让“租户2”中的用户访问“租户3”中的应用的访问令牌。客户端可以通过转到“http://tenant3/oauth/token”来调用对令牌的oauth请求。客户端通过在请求中包括“客户端断言”将自身识别为存在于“租户1”中的客户端。客户端断言包括客户端id(例如,“客户端1”)和客户端租赁“租户1”。作为“租户1”中的“客户端1”,该客户端有权调用对“租户3”上的令牌的请求,并且客户端想要用于“租户2”中的用户的令牌。因而,“用户断言”也作为同一个http请求的一部分被传递,以将“租户2”识别为用户的租赁,并且请求的报头将“租户3”识别为资源/应用的租赁。因此,请求会识别客户端的租赁、用户的租赁和资源的租赁。所生成的访问令牌将在作为应用租赁(“租户3”)的目标租赁的上下文中发布,并将包括用户租赁(“租户2”)。因此,访问令牌识别资源/应用的租赁和用户的租赁。

在一个实施例中,在数据层中,每个租户被实现为分离的条带。从数据管理的角度来看,工件存在于租户中。从服务的角度来看,服务知道如何与不同的租户共事,而多个租户是服务业务功能的不同维度。图8图示了在一个实施例中实现多个租赁的实例系统800。系统800包括客户端802,客户端802请求由理解如何与数据库806中的数据共事的微服务804提供的服务。数据库806包括多个租户808,并且每个租户包括对应租赁的工件。在一个实施例中,微服务804是由“租户1”中的客户端通过https://tenant3/oauth/token请求的oauth微服务,用于获取“租户2”中的用户访问“租户3”中的应用的令牌,并且数据库806存储客户端(“租户1”)的租赁、用户(“租户2”)的租赁以及资源/应用(“租户3”)的租赁的数据。在微服务804中使用来自数据库806的数据执行核实客户端802的请求是合法的oauth微服务的功能,并且如果是合法的,则使用来自不同租赁808的数据来构造令牌。因而,系统800是多租户的,因为通过不仅支持进入每个租赁的服务,而且还支持代表不同租户行事的服务,它可以在跨租户环境中工作。

系统800是有利的,因为微服务804在物理上与数据库806中的数据解耦,并且通过在更靠近客户端的位置复制数据,微服务804可以作为本地服务被提供给客户端并且系统800可以管理服务的可用性并在全球提供。

在一个实施例中,微服务804是无状态的,这意味着运行微服务804的机器不维护将服务指向任何具体租户的任何标记。代替地,例如,可以在进入的请求的url的主机部分上标记租赁。那种租赁指向数据库806中的租户808之一。当支持大量租户(例如,数百万租户)时,微服务804不能具有到数据库806的相同数量的连接,而是代替地使用连接池810,其在数据库用户的上下文中提供到数据库806的实际物理连接。一般而言,通过向底层驱动器或提供者供给连接字符串来构建连接,连接字符串被用于寻址具体的数据库或服务器并提供实例和用户认证凭证(例如,“server=sql_box;database=common;userid=uid;pwd=password;”)。一旦连接已经建立,它就可以被打开和关闭,并且可以设置特性(例如,命令超时长度,或事务(如果存在的话))。连接字符串包括由数据提供者的数据访问接口规定的键-值对的集合。连接池是所维护的数据库连接的高速缓存,使得在将来需要对数据库的请求时可以重用连接。在连接池中,在创建连接之后,它被放在池中并被再次使用,使得不必建立新连接。例如,当微服务804和数据库808之间需要10个连接时,在连接池810中将存在10个打开的连接,全部在数据库用户的上下文中(例如,与具体的数据库用户相关联,例如,谁是该连接的所有者、谁的凭证正在验证中、是否为数据库用户、是否为系统凭证等)。

连接池810中的连接是为可以访问任何东西的系统用户创建的。因此,为了正确处理由代表租户处理请求的微服务804进行的审计和特权,在与指派给具体租户的模式所有者相关联的“代理用户”812的上下文中执行数据库操作。这个模式所有者只能访问为其创建模式的租赁,并且租赁的价值是模式所有者的价值。当请求数据库806中的数据时,微服务804使用连接池810中的连接来提供该数据。因而,多租赁是通过使无状态的、弹性的中间层服务在特定于租户的数据存储库绑定的上下文中(例如,与其相关联)处理传入的请求来实现的,其中特定于租户的数据存储库绑定是以每个请求为基础的在与资源租赁相关联的数据存储库代理用户的上下文中(例如,与其相关联)创建的数据连接之上建立的,并且数据库可以独立于服务进行伸缩。

以下提供了用于实现代理用户812的示例功能:

dboperation=<准备要执行的db命令>

dbconnection=getdbconnectionfrompool()

dbconnection.setproxyuser(resourcetenant)

result=dbconnection.executeoperation(dboperation)

在这个功能中,微服务804将在从连接池810拉出的连接上的“代理用户”设置设置为“租户”,并且在使用连接池810中的数据库连接的同时在租户的上下文中执行数据库操作。

当将每个表分条以针对不同租户配置同一个数据库中的不同列时,一个表可以包括混合在一起的所有租户的数据。相反,一个实施例提供租户驱动的数据层。该实施例不为不同租户将同一个数据库分条,而是代替地为每个租户提供不同的物理数据库。例如,多租赁可以通过使用可插拔数据库(例如,来自oracle公司的oracle数据库12c)来实现,其中每个租户被分配分离的分区。在数据层,资源管理器处理请求,然后请求用于该请求的数据源(与元数据分离)。该实施例依据请求执行到相应数据源/存储库的运行时切换。通过将每个租户的数据与其他租户隔离,该实施例提供了改进的数据安全性。

在一个实施例中,各种令牌编码不同的租赁。url令牌可以识别请求服务的应用的租赁。身份令牌可以编码将被认证的用户的身份。访问令牌可以识别多个租赁。例如,访问令牌可以对作为这种访问的目标的租赁(例如,应用租赁)以及被给予访问的用户的用户租赁进行编码。客户端断言令牌可以识别客户端id和客户端租赁。用户断言令牌可以识别用户和用户租赁。

在一个实施例中,身份令牌至少包括“声称(claim)”[如安全领域的普通技术人员所使用的],其指示用户租户名称(即,用户所在的地方)。与授权令牌联系的“声称”是一个主体关于其自身或另一个主体作出的声明(statement)。例如,声明可以是关于名称、身份、密钥、组、特权或能力的。声称是由提供者发布的,并且它们被给给予一个或多个值,然后打包在由发布者发布的安全令牌中,通常被称为安全令牌服务(“sts”)。

在一个实施例中,访问令牌至少包括指示在对访问令牌作出请求时的资源租户名称(例如,客户)的声称/声明、指示用户租户名称的声称/声明、指示作出请求的oauth客户端的名称的声称/声明,以及指示客户端租户名称的声称/声明。

在一个实施例中,访问令牌可以根据以下json功能来实现:

{

“tok_type”:“at”,

“user_id”:“测试用户”,

“user_tenantname”:“<身份租户的值>”

“tenant”:“<资源租户的值>”

“client_id”:“测试客户端”,

“client_tenantname”:“<客户端租户的值>”

}

在一个实施例中,客户端断言令牌至少包括指示客户端租户名称的声称/声明以及指示作出请求的oauth客户端的名称的声称/声明。

本文描述的令牌和/或多种租赁可以在除idcs以外的任何多租户的基于云的服务中实现。例如,本文描述的令牌和/或多租赁可以在saas或企业资源规划(“erp”)服务中实现。

图9是一个实施例中的idcs的网络视图900的框图。图9图示了在一个实施例中在应用“区”904之间执行的网络交互。基于所需的保护级别和到各种其它系统(例如,ssl区、无ssl区等)的连接的实现,将应用分成区。一些应用区提供需要从idcs内部进行访问的服务,而一些应用区提供需要从idcs外部进行访问的服务,并且一些应用区域是开放访问。因而,针对每种区强制实施相应的保护级别。

在图9的实施例中,服务到服务通信是使用http请求来执行的。在一个实施例中,idcs使用本文描述的访问令牌不仅提供服务,而且还保护对idcs自身的访问以及在idcs自身内的访问。在一个实施例中,idcs微服务通过rest性的接口暴露并由本文所述的令牌保护。

在图9的实施例中,各种应用/服务902中的任何一个都可以对idcsapi进行http调用以使用idcs服务。在一个实施例中,应用/服务902的http请求经历oracle公共云负载均衡外部虚拟ip地址(“vip”)906(或其它类似技术)、公共云web路由层908以及idcs负载均衡内部vip应用910(或其它类似的技术),以被idcsweb路由层912接收。idcsweb路由层912接收来自idcs的外部或内部的请求,并且跨idcs平台服务层914或idcs基础设施服务层916路由它们。idcs平台服务层914包括从idcs外部调用的idcs微服务,诸如openidconnect、oauth、saml、scim等。idcs基础设施服务层916包括支持从idcs的内部调用的微服务,以支持其它idcs微服务的功能。idcs基础设施微服务的示例是ui、sso、报告、高速缓存、作业调度程序、服务管理器、用于制作密钥的功能等。idcs高速缓存层926支持用于idcs平台服务层914和idcs基础设施服务层916的高速缓存功能。

通过强制实施在外部访问idcs和idcs内部的安全性,idcs的客户可以被提供对于他们运行的应用的卓越的安全合规性。

在图9的实施例中,除了基于结构化查询语言(“sql”)通信的数据层918和基于ldap通信的id存储层920之外,oauth协议也被用于保护idcs内的idcs部件(例如,微服务)之间的通信,并且用于保护来自idcs外部的访问的相同令牌也被用于idcs内的安全性。即,web路由层912使用相同的令牌和协议来处理它接收到的请求,而不管请求是从idcs外部还是从idcs内部接收到的。因而,idcs为保护整个系统提供了单一一致的安全模型,由此允许卓越的安全合规性,因为在系统中实现的安全模型越少,系统越安全。

在idcs云环境中,应用通过进行网络调用来进行通信。网络调用可以基于适用的网络协议,诸如http、传输控制协议(“tcp”)、用户数据报协议(“udp”)等。例如,通过将应用y作为http统一资源定位符(“url”)暴露,应用x可以基于http与应用y通信。在一个实施例中,y是暴露各自与能力对应的多个资源的idcs微服务。当x(例如,另一个idcs微服务)需要调用y时,它构造包括y和需要被调用的资源/能力的url(例如https:/host/y/resource),并进行对应的rest调用,该rest调用经过web路由层912并被定向到y。

在一个实施例中,idcs之外的调用者可以不需要知道y在哪里,但是web路由层912需要知道应用“y”在哪里运行。在一个实施例中,idcs实现发现功能(由oauth服务的api实现),以确定每个应用在哪里运行,因此不需要静态路由信息的可用性。

在一个实施例中,企业管理器(“em”)922提供将内部部署的和基于云的管理扩展到idcs的“单一虚拟管理平台(singlepaneofglass)”。在一个实施例中,是来自chefsoftware公司的配置管理工具的“chef”服务器924为各种idcs层提供配置管理功能。在一个实施例中,服务部署基础设施和/或持久性存储模块928可以将oauth2http消息发送到idcsweb路由层912,以进行租户生命周期管理操作、公共云生命周期管理操作或其它操作。在一个实施例中,idcs基础设施服务层916可以将id/密码http消息发送到公共云通知服务930或公共云存储服务932。

云访问控制–sso

一个实施例支持用于实现云规模的sso服务的轻量级云标准。轻量级云标准的示例是http、rest以及通过浏览器提供访问的任何标准(因为web浏览器是轻量级的)。相反,soap是重量级云标准的示例,其需要更多的管理、配置和工具来构建客户端。该实施例对于应用使用openidconnect语义来针对idcs请求用户认证。该实施例使用轻量级的基于httpcookie的用户会话跟踪来在idcs处跟踪用户的活动会话,而无需有状态的服务器端会话支持。该实施例对于应用使用基于jwt的身份令牌,以在将经认证的身份映射回其自己的本地会话时使用。该实施例支持与联合的身份管理系统的集成,并且暴露用于企业部署的samlidp支持以针对idcs请求用户认证。

图10是一个实施例中的idcs中的sso功能的系统架构视图的框图1000。该实施例使得客户端应用能够充分利用基于标准的web协议来发起用户认证流程。需要将sso与云系统集成的应用可以位于企业数据中心中、远程合作伙伴数据中心中,或者甚至由客户内部部署操作。在一个实施例中,不同的idcs平台服务实现sso的业务,诸如openidconnect,用于处理来自所连接的本机应用(即,利用openidconnect与idcs集成的应用)的登录/注销请求;samlidp服务,用于处理来自所连接的应用的基于浏览器的登录/注销请求;samlsp服务,用于编排针对外部samlidp的用户认证;以及内部idcssso服务,用于编排包括本地或联合登录流程的最终用户登录仪式以及用于管理idcs主机会话cookie。一般而言,http可以带表单或不带表单工作。当它带表单工作时,表单就会在浏览器中被看到。当它不带表单工作时,它作为客户端到服务器的通信。openidconnect和saml都需要能够呈现表单,这可以通过存在浏览器来实现,或者通过充当浏览器起作用的应用虚拟执行。在一个实施例中,通过idcs实现用户认证/sso的应用客户端需要作为oauth2客户端在idcs中注册,并且需要获得客户端标识符和凭证(例如,id/密码、id/证书等)。

图10的示例实施例包括共同提供登录能力的三个部件/微服务,包括两个平台微服务:oauth21004和saml21006,以及一个基础设施微服务:sso1008。在图10的实施例中,idcs提供“身份元系统”,其中在不同类型的应用(诸如需要三参与方oahth流程并充当openidconnect中继方(“rp”,将其用户认证功能外包给idp的应用)的基于浏览器的web或本机应用1010、需要双参与方oauth流程并充当openidconnectrp的本机应用1011以及充当samlsp的web应用1012)上提供sso服务1008。

一般而言,身份元系统是用于数字身份的可互操作架构,从而允许基于多种底层技术、实现和提供者来采用数字身份的集合。ldap、saml和oauth是提供身份能力并且可以是用于构建应用的基础的不同安全标准的示例,并且身份元系统可以被配置为在这种应用之上提供统一的安全系统。ldap安全模型指定用于处理身份的具体机制,并严格保护系统的所有次通过。开发saml,以允许一组应用安全地与属于不同安全域中的不同组织的另一组应用交换信息。由于这两个应用之间没有信任,因此开发了saml,以允许一个应用对另一个不属于同一组织的应用进行认证。oauth提供了用于执行基于web的认证的轻量级协议的openidconnect。

在图10的实施例中,当openid应用1010连接到idcs中的openid服务器时,其“通道”请求sso服务。类似地,当saml应用1012连接到idcs中的saml服务器时,其“通道”也请求sso服务。在idcs中,相应的微服务(例如,openid微服务1004和saml微服务1006)将处理每个应用,并且这些微服务从sso微服务1008请求sso能力。通过针对每个协议添加微服务,然后对于sso能力使用sso微服务1008,可以扩展这个架构,以支持任意数量的其它安全协议。sso微服务1008发布会话(即,提供ssocookie1014)并且是架构中具有发布会话的权限的唯一系统。idcs会话通过浏览器1002使用ssocookie1014来实现。浏览器1002还使用本地会话cookie1016来管理其本地会话。

在一个实施例中,例如在浏览器内,用户可以使用基于saml的第一应用并且登录,并且随后使用由诸如oauth之类的不同协议构建的第二应用。用户被提供有同一浏览器内的第二应用上的sso。因而,浏览器是状态或用户代理并且维护cookie。

在一个实施例中,sso微服务1008提供登录仪式1018、id/密码恢复1020、首次登录流程1022、认证管理器1024、httpcookie管理器1026以及事件管理器1028。登录仪式1018实现基于客户设置和/或应用上下文的sso功能,并且可以根据本地表单(即,基本认证)、外部samlidp、外部oidcidp等进行配置。使用id/密码恢复1020来恢复用户的id和/或密码。当用户第一次登录时(即,sso会话尚不存在时),实现首次登录流程1022。认证管理器1024在成功认证时发布认证令牌。httpcookie管理器1026将认证令牌保存在ssocookie中。事件管理器1028公布与sso功能相关的事件。

在一个实施例中,oauth微服务1004和sso微服务1008之间的交互基于浏览器重定向,使得sso微服务1008使用html表单来质询用户、验证凭证并发布会话cookie。

在一个实施例中,例如,oauth微服务1004可以从浏览器1002接收授权请求,以根据三参与方oauth流程来认证应用的用户。oauth微服务1004然后充当oidc提供者1030、将浏览器1002重定向到sso微服务1008,并沿着应用上下文传递。取决于用户是否具有有效的sso会话,sso微服务1008验证现有会话或者执行登录仪式。在成功认证或验证后,sso微服务1008将认证上下文返回到oauth微服务1004。然后oauth微服务1004用授权(“az”)代码将浏览器1002重定向到回调url。浏览器1002将az代码发送到oauth微服务1004,以请求所需的令牌1032。浏览器1002还在http授权报头中包括其客户端凭证(当在idcs中注册为oauth2客户端时获得的)。作为回报,oauth微服务1004向浏览器1002提供所需的令牌1032。在一个实施例中,提供给浏览器1002的令牌1032包括由idcsoauth2服务器签署的jw身份和访问令牌。这个功能的进一步细节在下面参考图11公开。

在一个实施例中,例如,oauth微服务1004可以从本机应用1011接收授权请求,以根据双参与方oauth流程来认证用户。在这种情况下,oauth微服务1004中的认证管理器1034执行对应的认证(例如,基于从客户端1011接收到的id/密码),并且令牌管理器1036在成功认证后发布对应的访问令牌。

在一个实施例中,例如,saml微服务1006可以从浏览器接收ssopost请求,以认证充当samlsp的web应用1012的用户。然后,saml微服务1006充当samlidp1038,将浏览器1002重定向到sso微服务1008,并沿着应用上下文传递。取决于用户是否具有有效的sso会话,sso微服务1008验证现有会话或者执行登录仪式。在成功认证或验证后,sso微服务1008将认证上下文返回给saml微服务1006。然后saml微服务用所需的令牌重定向到sp。

在一个实施例中,例如,saml微服务1006可以充当samlsp1040并前往远程samlidp1042(例如,活动目录联合服务(“adfs”))。一个实施例实现标准saml/ad流程。在一个实施例中,saml微服务1006和sso微服务1008之间的交互基于浏览器重定向,使得sso微服务1008使用html表单来质询用户、验证凭证并发布会话cookie。

在一个实施例中,通过防火墙1044执行idcs内的部件(例如,1004、1006、1008)与idcs外的部件(例如,1002、1011、1042)之间的交互。

sso服务

在一个实施例中,在idcs的云环境中,当租户被供应并且需要对其应用的保护时,idcs提供身份功能,诸如认证、授权、审计等。当用户需要使用该应用时,idcs提供用户身份的完全安全性,并且生成特定类型的令牌,并为该应用建立或保护用户访问。

在一个实施例中,sso服务用于保护不同类型的客户端/应用,其中对每个特定应用的访问由标准协议(诸如oauth或saml)保护。协议规定了令牌格式、需要什么令牌以及生成特定令牌需要什么浏览器语义。一旦接收到令牌,应用可以使用基于令牌的声称来给予对特定用户的访问。在一个实施例中,令牌要求用户是谁、行为者是谁、范围是什么以及被访问的受众是什么。在一个实施例中,令牌对于oauth和saml是不同的,并且包括用户在认证之后建立的用户声称/声明的语义。

通常,基于标准的协议(诸如oauth和saml)未规定或提供任何指出如何生成令牌或如何认证用户的规范。相反,它们仅需要对用户进行认证,并规定应该获得哪种令牌。例如,对于oauth或saml令牌,协议仅规定了令牌的语义,但没有规定或指定应该如何对用户进行认证、用户如何登录、注销等。

然而,在一个实施例中,idcssso服务定义了如何认证特定用户(例如,认证是否是单因素、双因素、生物特征认证等)。在该实施例中,登录策略或访问策略指出如何对用户进行认证以访问应用。在一个实施例中,在执行认证之后,idcs将认证转换成idcs会话或“全局会话”(例如,被配置为会话cookie或会话令牌)。全局会话是具有特定语义/格式的云感知会话,并被配置用于idcs多租户环境。取决于要为应用执行的特定身份任务,idcs可以将全局会话转换为适用令牌(例如,oauth令牌、saml令牌等),并将令牌提供给应用。

在一个实施例中,sso服务是可用于任何协议(例如,oauth、saml、社交令牌、社交服务等,或任何新开发的规范)的公共控制器系统。在一个实施例中,当sso服务接收到请求时,将请求参数归一化。因此,sso服务可以保持通用,并为不同类型的令牌服务。sso服务不需要知道特定的协议语义(例如,特定于oauth的语义或特定于saml的语义)。

在一个实施例中,sso服务将完整的登录仪式定义为公共逻辑。登录仪式规定用户如何登录、哪些因素用于进行认证、系统如何执行因素认证、用户和idcssso服务之间的编排如何发生等。sso服务还定义注销仪式,该仪式规定如何从全局会话注销以及如何复制到不同的协议。sso服务提供协议驱动的应用注销。

在一个实施例中,完整的登录仪式发生在sso服务和ui交互之间。登录仪式取决于用户用于登录的因素(例如,用户id和密码、基于证书的认证、基于移动因素的认证等)。

一个实施例将sso服务实现为公共控制器,并且还将认证模块插件实现为每个登录仪式的后端认证器。例如,对于基于用户id和密码的认证,该实施例实现了前往包括用户id和密码的身份存储库的插件。然后,插件对到该存储库的用户凭证进行认证。作为另一示例,如果用户提供用户凭证的证书(诸如x.509证书),则sso服务确定适当的认证模块,在这种情况下该模块是证书模块。证书模块前往证书存储库,并对照证书存储库验证所提供的证书。在一个实施例中,用户可以提供移动认证因素,诸如短消息服务(“sms”)或基于时间的一次性密码(“totp”)。

在一些实施例中,sso服务可以确定前往多因素认证插件来认证用户。sso服务编排对每个插件的要求。在各种实施例中,插件可能需要与用户进行一次交互,诸如一个用户id和密码,或者可能需要与用户进行多次交互,诸如多个页面。

因而,sso服务为不同类型的用户认证编排整个登录仪式。一旦用户被认证,sso服务就建立全局会话。在一个实施例中,全局会话填充有各种用户信息,例如用户id、用户偏好、用户区域、用户时区、向其认证的因素或模块、认证时间等。

在一个实施例中,在idcs的云架构中,服务被配置为无状态的和水平可伸缩的,并且在服务器中不维护任何状态。因而,由于服务无法维护客户端会话的会话状态,因此作为全局会话的整个会话都放在客户端cookie中。即,该实施例将全局会话配置为客户端cookie,并且客户端会话是其中保持整个全局会话的cookie。在一个实施例中,cookie是请求报头的一部分,并且每次请求以“302”返回到浏览器,并且重定向返回到另一个服务,cookie被重放(即,报头被重放)。

在一个实施例中,使用协议缓冲器来存储全局会话的内容,以最小化其尺寸,使得全局会话可以被包括在cookie中。一个实施例提供用于保持全局会话、优化其尺寸以及将cookie或客户端会话转换成特定的基于协议的令牌的语义。

在一个实施例中,当用户已经登录到系统(因此在系统中具有全局会话)并且正在利用同一浏览器会话访问另一应用时,调用第一流程。在该流程中,协议层(例如,图10中的1004和1006)不确定用户是否具有有效会话,因为他们不理解全局会话。相反,它们请求sso服务来确定用户是否有有效的全局会话。sso服务任何进入其中该服务与有效会话取决于协议而编排不同的流程的模式。sso服务基于某些参数来确定会话的有效性,并且如果用户具有有效的全局会话,则sso服务生成特定于协议的令牌并给予访问权限。

在一个实施例中,当会话的有效性不足并且需要断言用户并且需要本地身份时,调用第二流程。

在一个实施例中,调用第三流程用于第一次登录。当(使用相应的认证模块)对用户进行认证时,并且在执行编排并且sso服务将要创建会话之后,该实施例确保用户存在于本地idcs用户存储库中。用户需要具有本地身份存在(例如,如果用户已经被远程认证,则可能不是密码,但至少是一些最少量简档信息)。类似地,在存在现有有效会话的流程中,sso服务在本地存储库中断言用户,并确保用户存在于本地idcs身份存储库中。

一个实施例为联合系统提供一组流程。联合提供跨域sso,可能包括sp、idp或其他行为者和实体。例如,sp和idp可能在不同的域上(例如,cookie域、身份域等),并且会话可能需要使用联合协议(诸如saml2)从一个域转移到另一个域。在一个域中,该实施例可以创建不能被另一个域读取的本地会话或全局会话。因此,在转到另一个域(也必须是可信域)之前,该实施例将全局会话转换为saml令牌,并将saml令牌转移到另一个域中,在该域中可以对其进行验证和断言。

在一个实施例中,当表现为samlsp或idp时,sso服务编排了不同的流程。一般而言,当用户不在本地时,用户被认证为远程idp。例如,用户可能具有使用云服务的云帐户,但可能是不希望将其用户身份复制到云存储库中的内部部署用户或现有企业用户。由于用户身份是内部部署的,所以内部部署成为远程idp。在这种情况下,本地idcssso服务表现为sp并联系远程idp。

当用户进入充当sp的sso服务时,sso服务使用联合协议(诸如saml)前往远程idp。认证在远程idp处执行,并在远程idp上生成saml令牌。远程idp将saml令牌发送到sso服务。idcssaml服务提取saml令牌,从saml令牌中提取所需的属性/声明(例如,认证声明、授权声明、名称、id等),以特定格式将该信息归一化,然后将其传递给sso服务。idcssaml服务不执行断言。sso服务不需要编排用户登录仪式,因为远程认证已经由远程idp内部部署执行。相反,sso服务以归一化的属性格式获取归一化的saml状态,并在本地系统中断言该状态(断言这些属性)。

一个实施例为联合提供不同的选项/标志或配置,例如,用户是否必须存在于本地,即使它是远程认证的,是否忽略用户在本地系统中的存在等。在此基础上,sso服务在本地断言用户或者仅断言声称,然后创建全局会话。然后,sso服务将请求交还给协议层(即saml服务)。

在一个实施例中,整个idcs系统中的全局会话是要生成的任何协议令牌的真实来源。sso服务基于其编排的不同类型的流程(诸如新的认证、现有会话、用于联合的远程认证、用于oauth的远程认证或社交登录等)而生成全局会话。然后,idcs系统可以为不同的协议生成令牌并将令牌交还给应用,并且基于令牌,客户端可以访问租户应用。

归一化状态

一个实施例通过为不同协议(例如saml和oauth)提供归一化参数来支持全局会话,同时oauth和saml服务中的每一个服务接收它们相应的令牌。例如,saml服务接收saml断言,saml断言是带有报头和主体的xml块。报头定义令牌的类型或用于生成认证的安全机制的类型,例如可以是x.509、用户id/密码等。在一个实施例中,saml令牌是根据saml2规范的。saml服务提取saml令牌,读取saml令牌,并验证saml令牌的每个部分。令牌的主体可以包括saml断言,诸如名称id、认证声明(指出远程idp使用的认证的类型)等。

令牌还包括授权声明(指出用于授权的属性)和认证已经转移了一些属性之后的属性声明(指出远程idp)。在一个实施例中,远程idp具有用户的真实身份存储库,并使用该身份存储库来认证用户,并基于属性声明要求而发回saml令牌中的一些属性。需要发送的属性是基于idp和sp之间建立的saml配置来确定的。在一个实施例中,在实体成为sp的idp或idp的sp之前,两个实体都必须是可信实体,并且存在作为先决条件执行的元数据交换。它们还共享它们的证书(例如,公钥/证书)以建立彼此需要的信任和配置。当sp获取saml断言时,属性声明基于sp已经向idp规定的配置声明(例如,在生成saml令牌后将向sp发送哪些属性)。

在一个实施例中,saml服务只知道saml语义。它可以打开saml令牌、验证签名,并且如果它是加密的,则基于签名和加密算法对其进行解密。这些算法也是sp和idp之间的配置的一部分。在一个实施例中,所有这些步骤都在协议层执行,其中saml服务从令牌中获取属性。在一个实施例中,saml服务将属性归一化为键/值对(key/valuepair)(例如,属性名称和值)。在该实施例中,键/值对配置是不基于任何特定协议的通用格式。sso服务将属性的归一化状态作为键/值对接收。在一个实施例中,在协议级声称中对oauth令牌执行相同的归一化。也就是说,oauth声称也以相同的键/值对格式被归一化。

在一个实施例中,协议可以给出作为认证协议的一部分的属性、需求属性和/或在建立全局会话之后规定在执行认证/验证之后sso服务应该返回到哪里(例如,基于协议服务的返回url,在该返回url上进行回调)。例如,对于saml,由sso服务接收属性,而对于oauth,sso服务提供属性,因为它对用户进行了认证。例如,在一个实施例中,saml协议可以从远程实体(例如,远程idp)接收属性,或者指出它需要返回属性。在oauth的情况下,协议规定在建立全局会话后,协议需要一些属性返回来为最终应用生成基于oauth的声称。在一个实施例中,oauth或saml可能需要sso服务前往某些端点/url。这些信息作为来自两种协议的状态信息回到sso服务。

在一个实施例中,sso服务和去往/来自协议层(例如,saml和oauth服务)的通信是通过“重定向”(通过http303)进行的,并且它们共享加密cookie中的公共状态。加密的cookie存储协议信息和归一化格式,该格式被配置为简洁并且适合不同的浏览器限制(例如,报头尺寸、cookie尺寸等)。

请求状态

在实施例的云架构中,服务是无状态的。因而,一个实施例提供了流经不同的层来彼此交互的共同状态。例如,当协议层在不存在sso会话时联系(http重定向到)sso服务以进行认证时,当协议层联系sso服务以进行会话验证和与现有会话的用户断言等时,该实施例在各种流程的持续时间内(以加密主机cookie的形式)保持客户端的状态。

在一个实施例中,公共状态包括客户端会话和客户端状态。该实施例提供了“请求状态”,并将其作为报头包含在“请求cookie”中。请求cookie不是ssocookie或认证会话,而是跨不同服务(例如,协议服务、sso服务等)维护的预认证状态。它还包括执行上下文(例如,诸如审计、诊断等的状态)。归一化状态(例如,属性、返回url、不同流程所需的内容等)也在请求状态下被捕获并放入请求cookie中。在一个实施例中,该cookie被加密,并且加密密钥被安全地存储并定期滚动(例如,每12小时滚动一次),使得它不会被劫持。

在一个实施例中,存储在请求状态中的状态信息不包括诸如密码的用户安全数据。在一个实施例中,即使在协议之间的交互期间,也只有声称被存储在请求状态中,并且签名被附加到声称中。

在一个实施例中,在登录处理(例如,登录仪式或不同的流程)中使用的请求状态也可以在注销处理中使用,因为该状态包括关于用户已经访问并且需要针对协议返回或注销的不同端点的信息、每个协议的归一化状态、声称、在身份系统中断言用户所需的属性等。

在一个实施例中,为了在各种流程的持续时间内(以加密主机cookie的形式)保持客户端的状态,实现了以下表示(representation):

·“userrequestdata”,这是每当协议层向sso服务发起新的请求用于创建/验证现有会话时创建的;

·“usersessiondata”,这是由sso服务在完成对来自协议层的请求的处理后创建的(一旦创建了该表示,“userrequestdata”就被删除,并且所有相关数据保存在该表示中);

·“abstractuserdata”,这是“userrequestdata”和“usersessiondata”的父级,包括两者使用的公共状态数据结构。

表1提供了在一个实施例中在“userrequestdata”表示中包括的功能。

表1:“userrequestdata”表示中包括的示例功能

在一个实施例中,“usersessiondata”表示包括“byte[]authcontext”,其是用户会话数据的简明二进制表示,例如由“authcontext”对象定义的属性。协议缓冲器库用于以二进制格式有效地表示数据。使用滚动的私钥(例如每12小时滚动一次)对其进行加密。表2提供了在一个实施例中在“authcontext”表示中所包括的功能。

表2:“authcontext”表示中包括的示例功能

表3提供了在一个实施例中在“abstractuserdata”表示中所包括的示例功能。

表3:“abstractuserdata”表示中包括的示例功能

在一个实施例中,对应于“map<integer,byte[]>componentdata”的部件可以是例如sso、oauth2和saml服务器。数据是二进制的,因此可以被加密并且可以从部件数据表示中抽象出私钥管理。作为“usersessiondata”的一部分,它保存会话的持续期间向其发布令牌/断言的每个客户端或合作伙伴的跟踪数据。这也有助于全局注销。作为“userrequestdata”的一部分,它保存部件级请求范围的数据。

在一个实施例中,sso服务实现资源管理器和sso运行时。资源管理器是idcs的公共数据访问层。它是元数据驱动的,因此它可以管理在符合scim的资源类型和模式定义中所定义的任何资源类型。资源管理器处理所有资源类型的所有公共逻辑,包括对属性、数据类型、所需值、典型(canonical)值等的基于模式的验证。它还处理设置默认值、设置“创建/更新日期”值、设置“创建者/更新者”值、保护敏感属性、映射到目标属性、授权检查和事件发布。资源类型数据管理器的外部接口是http/rest(部署在idcs管理服务器中,并且由“serviceup”命令提出),其内部实现是通过java接口实现的。在一个实施例中,基于java特定请求(“jsr”)330,使用百千字节内核(“hk2”)来注入实现。资源类型有效负载遵循由scim2.0概述的资源模型。例如,“/applications”和“/credentials”是特定的资源类型。

能够通过“/resourcetypes”和“/schemas”发现资源定义和模式。资源类型数据管理器管理每个租户的操作数据(例如,用户、组、令牌、资源类型、模式等)、租户设置(跨服务租户特定设置和服务特定租户特定设置)和全局配置(跨服务全局配置和服务特定全局配置)。

sso运行时

图10a图示了一个实施例中的sso运行时的示例框图1000a,其中sso服务1002a实现了本地和联合登录的用户登录/注销仪式。云sso集成架构使用标准的openidconnect用户认证流程进行基于浏览器的用户登录。因为云登录基于openidconnect,所以openid提供者(“op”,在图1000a中示为oauthop1004a)是登录请求到达sso1002a的位置。内部地,运行时认证模型是无状态的,从而以主机httpcookie的形式维护用户的sso状态。

用户登录请求流程如下:用户访问基于浏览器的应用或移动/本地应用;连接应用(oauthrp1006a或应用的强制实施点)检测到用户没有本地应用会话,并要求用户被认证;连接应用(oauthrp1006a或应用的强制实施点)发起针对oauth2服务的openidconnect登录流程(范围=“openid简档”的三参与方az授予流程);并且oauth2服务(oauthop1004a)构建应用上下文并重定向到sso服务1002a。

在一个实施例中,oauthop1004a和sso1002a之间的服务等级协议(“sla”)包括以下内容:

●idcs_request-idcs_requesthttpcookie用于维护sso1002a和通道部件之间的各种请求/响应流程之间的状态。

○callbackurl:这是由oauthop1004a在重定向到sso1002a之前设置的。sso1002a在处理后重定向到该url。

○errorcode:这是sso1002a如何就发生的任何错误返回与oauthop1004a进行通信。

○errormessage:本地化sso错误消息。

●idcs_session

○如果认证状态为“成功”,则sso1002a创建具有认证的idcs_session,并将用户重定向到idcs_request中的/callbackurl。

○在有效的idcs_session已经存在的情况下,sso1002a断言从idcs_sessioncookie中取出的用户。

一个实施例还可以实现持久cookie,该持久cookie可以存储用户偏好,诸如用户场所(locale)。该cookie可以用于将错误消息转换为用户特定的场所。

在一个实施例中,根据idcs微服务架构,ui服务1008a(登录应用/注销)被实现为单独的服务,而非sso1002a的一部分。ui服务1008a和sso服务1002a经由在图1000a中的rest层1010a中实现的rest端点彼此进行交互,并且状态信息作为json有效负载在sso服务1002a和rest层1010a之间传递。

在一个实施例中,sso服务1002a包括rest层1010a、sso控制器1012a、凭证收集器1014a、认证管理器1016a(用于插入在不同模块中并在每个模块上调用、认证和验证)、会话管理器1018a、sso事件管理器1020a、sso客户端api集成器1022a、错误处理1024a和断言器(基于不同身份进行断言,未在图1000a中示出)。在一个实施例中,当认证请求在“/sso”到达sso1002a的get方法时,该请求包括由oauthop1004a(对应于oauthrp1006a)或samlidp1005a(对应于samlsp1007a)作为idcs_requesthttpcookie提交给sso1002a的请求和状态数据。idcs_requestcookie被解密和解析,并且参数和其他http报头在请求上下文对象中被捕获,并被传递给sso控制器1012a。sso1002a通过重定向到登录页面(由ui服务1008a实现)来收集用户的凭证,并且登录页面向sso1002a的post方法提交凭证。状态信息作为json有效负载在它们之间传递。

在一个实施例中,sso控制器1012a是根据请求的状态确定要采取什么动作的类。可能存在指示凭证收集、凭证验证、第一次用户、忘记密码、密码重置等的各种状态。sso控制器1012a根据各种条件将流程编排到其他部件。

一个实施例支持两种形式的认证:基本(basic)和表单形式。(form)在凭证收集器1014a处收集所需的凭证,诸如用户名、密码和租户名称,并传递以进行认证。这个类准备要被发送到登录ui的json请求,并解析从登录应用接收到的响应。

认证管理器1016a是验证idcs用户id/密码和/或发布认证令牌的类。可能存在各种认证结果,诸如认证成功、无效凭证、禁用用户、密码已过期、密码需要重置等。正确的错误代码作为sso响应的一部分被返回。认证管理器1016a与用户/身份管理器1030a(管理服务中的资源管理器)的“/userauthenticator”rest端点进行对话以执行对凭证的实际验证。在一个实施例中,在认证管理器1016a处创建用户的认证上下文1017a(全局会话)和认证声称。如果认证上下文1017a已经存在于请求中,则通过与相同的用户认证服务进行对话而非验证凭证来断言令牌。

在一个实施例中,会话管理器1018a与cookie管理器1028a进行通信并管理ssocookie,包括在连接应用上存储认证上下文和元数据。cookie管理器1028a是与所有其他层共享的公共层,并生成和优化全局会话状态,使其成为客户端会话cookie。在成功认证或验证后,sso服务1002a使用包括用户的认证令牌的新创建/更新的sso主机httpcookie重定向回oauth服务。sso服务1002a从cookie中移除特定于请求的数据。以下是用于从http小服务程序(servlet)请求中读取cookie数据的示例功能:

cookiemanagercm=cookiemanagerfactory.createinstance(request,response);

usersessiondatasessiondata=cm.getsessiondata();

stringmyauthntoken=sessiondata.getauthntoken();

byte[]mysamldata=

sessiondata.getcomponentdata(cookiemanagercomponents.saml);

sessiondata.setauthntoken("4141fb74579eab131ecf6369....");

cm.setsessiondata(sessiondata);

cm.commit();

在一个实施例中,http请求中的cookie数据的示例如下:

两个cookie:

条目(entry)#1:

名称:"ora_ocis_1"

值:"624790624790578067acbe05a58a589c5595346236e57a5c373b83e3758ac38"

条目#2:

名称:"ora_ocis_2"

值:"6246bef44242bf6246bef44242bf6246bef44242bf6246bef44242bf~4~6246bef44242bf"

在一个实施例中,sso事件管理器1020a与事件管理器1032a进行通信,并公布与sso流程相关联的事件。一个实施例定义sso事件及其目标是什么(例如,审计、分析、通知、度量等)。以下是对应的示例功能:

ssoservice.authentication.success

ssoservice.authentication.failure

ssoservice.server.startup

...

importoracle.idaas.common.event.*;

eventevent=new

eventimpl.builder(systemeventid.system_error_runtime)

.ecid("123-456-7890").rid("relationshipid")

.eventvalue("eventvalue").servicename("servicename")

.actorid("actorid").actorname("actorname")

.tenantname("testtenant").message("testmessage")

.eventdata("name3","value3").build();

eventmanager.publish(event);

在一个实施例中,sso客户端api集成器1022a与资源管理器1026a进行通信,并且特定于租户的sso设置存储在管理服务器的资源管理器1026a中并可用。经由rest请求,在sso运行时服务器中读取sso设置,诸如authn方案、会话超时等。因为读取这些设置涉及网络调用,所以只要有回调机制来获得这些设置的任何更改的通知,就可以为每个租户缓存这些设置。以下是资源管理器1026a的功能的示例:

stringurl="http://"+hostname+":"+port;

idaasclientclient=idaasclient.login(tenantname,username,password);

client.settargeturi(uri.create(url));

ssosettingsserviceservice=

client.getservice(ssosettingsservice.class);

ssosettingsssosettings=service.get("ssosettings",null);

ssosettings.getcookiesessiontimeout()

ssosettings.getmaxloginattempts()

在一个实施例中,ui服务1008a为消费sso服务1002a的最终用户提供交互点,并提供诸如以下操作:

●从最终用户收集凭证用于认证、密码管理以及通过基于json的rest调用来调用相应的sso服务端点;

●处理用sso服务1002a发起的jsonrest调用的各种错误场景;

●通过sso服务1002a发起的重定向来处理sso服务1002a引起的以及在与协议层交互期间遇到的各种错误。

在一个实施例中,sso控制器1012a根据以下流程为上述情况提供ui服务1008a。

在协议三参与方最终用户流程中:

●最终用户访问受rp1006a保护的应用(例如,特定于协议的网关守护代理);

●rp1006a触发协议交互,并且协议层重定向到端点“/sso/v1/user/login”;

●在idaas_reqcookie中设置上下文后,端点在sso服务1002a上返回;

●sso服务1002a读取idaas_reqcookie中的租户报头,并基于租户配置,通过重定向到端点“/member/v1/signin”来调用远程idp1036a或登录ui服务1008a;

●ui服务1008a收集凭证,并经由json请求将它们提交给端点“sso/v1/user/login”上的post方法;

●sso服务1002a验证凭证。在失败时,用分级(例如,2级:主要和次要)错误代码来响应ui服务1008a。在密码重置时,下一个操作(“nextop”)和相应的错误代码被发送到ui服务1008a。在成功时,如果启用了post登录,则相应的nextop被发送到ui服务1008a。在成功时,如果禁用了post登录,则json响应被返回,其中nextop作为“重定向”,有效负载中带有“redirecturl”。

“redirecturl”是从idaas_reqcookie获得的协议层的回调url。

在任一个成功情况下,在响应时idcs_ssocookie都会被创建,并在用户浏览器中进行设置;

●如果启用了post登录,并且操作由ui完成,在异议或同意的情况下,控制通过json请求返回到sso服务1002a;

●sso服务1002a用同意/异议更新idaas_reqcookie,并发送带有作为“重定向”的nextop并且有效负载中带有“redirecturl”的响应,;

●协议层读取idcs_ssocookie并生成特定于协议的令牌以返回到rp1006a;

●rp1006a设置读取令牌的特定于应用的cookie,然后用户被授予访问权限,并可以使用该cookie来访问应用。

在来自云门的基本认证流程中:

●最终用户/客户端使用用户名和密码授权报头来访问受云门保护的资源。

●云门验证资源受基本认证保护,并使用posthttp请求和有效负载中的凭证数据来调用“/sso/v1/user/login”处的sso端点。

●缺少idcs_request并且存在属性:“rpid”、“referrer”是将sso控制器流程分叉到不同处理程序:“basicauthhandler.java”以处理基本认证的条件。

●“basicauthhandler”仅执行对json有效负载中的凭证的验证,并以成功/失败信息进行响应,而不使用认证上下文来设置idcs_ssocookie。

●它还处理用于认证的sso事件,并使用json响应来传播进行凭证验证期间的错误代码。

在从ui自动登录(首次使用)和密码更改流程中:

●租户管理员从管理员ui为用户和他们的电子邮件进行配置,并向用户发送包括带有限期令牌的url的电子邮件。

●用户点击链接以使用令牌来访问ui服务1008a。ui服务1008a用身份服务来验证令牌并收集凭证。

●ui服务1008a将凭证发布到身份服务以更新到后端。

●ui服务1008a还向sso控制器发布端点“/sso/v1/user/login”,用于自动登录,其中在json有效负载中设置了“redirecturl”属性,带有操作/op:“cred_submit”,没有idcs_reqcookie。这是由“credsubmithandler”处理的。

●sso控制器1012a按照以下优先级顺序来获取重定向url:

1)来自idcs_request的回调url;

2)仅当idcs_requestcookie不存在时,json有效负载中的“redirecturl”属性;

3)如果“idcs_request”cookie或“redirecturl”属性都不存在,则在成功认证时使用“我的服务”url以进行重定向。

sso状态和流程

图10b图示了一个实施例中sso功能的示例状态和流程图1000b。图10b的实施例提供了每个身份操作(诸如忘记密码、帐户日志、来自samlsp和idp的请求等)的sso控制器引擎流程图的示例。在该实施例中,sso服务1002a具有模块化配置,其中模块使用全局状态彼此交互以及与协议层(例如,openidconnect、saml等)交互。该实施例提供了以安全方式传送状态的新机制。状态的大小被有效地配置,使得状态占用较小的空间,并且操作执行得更快。该实施例以自适应的方式进行配置以确保它能够被增强到多因素认证、逐步认证等。该实施例提供了自适应配置,以便可以容易地添加附加的认证插件,并且可以提供附加的逐步认证。该实施例还可以使用相同的部件/模块来执行其他功能,诸如基于策略的授权检查等。

在一个实施例中,协议层(例如,oauth、saml等)和sso服务1002a之间的交互通过http执行。它们通过请求上下文中的某些状态差异(在cookie中解析)进行通信,并且它们(基于该状态中的固定属性)总是知道返回到哪里。例如,当sso服务1002a获取控制并基于它从其获取请求的协议确定去哪里时,该协议已经将最终url或返回url设置为该状态,并且sso服务1002a基于在认证之后或成功或失败之后sso服务1002a发现了什么来跟随该状态。类似地,当协议获取一些关于例如令牌请求的信息时,它会跟踪请求cookie中的指定部件。

在一个实施例中,状态包括不同的映射对象,包括每个协议的部件数据。例如,当oauth获取授权请求时,它包括指出从谁那里获取请求的跟踪信息等。在一个实施例中,oauth跟踪特定部件数据中的信息并初始化请求cookie。用于在请求cookie中写入的关键字(key)在部件(例如,oauth、saml、sso等)之间共享,并且这些部件之间有关于例如应该写什么数据和写在哪里、什么时候应该写数据等的共同的理解。例如,当实施例必须记录“n”次往返时,对于应该在请求cookie中放入多少数据以及如何放入有共同的理解,因此cookie对下一个部件是尽可能可用的。状态作为加密和安全的cookie流过。当在将数据作为加密的cookie流动方面存在安全顾虑时,一个实施例将状态配置为加密的有效负载post而非在“302”上进入的请求cookie。实施例作为httppost进行接口(port)。

例如,在一个实施例中,rp1016a可以从浏览器接收访问受保护资源的请求。rp1016a向idcsop/idp/samlsp1020a发送302/authorize或302sso/slo,idcsop/idp/samlsp1020a进而向sso控制器1004a发送带有idcs_request应用上下文的302/sso/v1/userlogin。

idcs登录流程是sso、op、samlidp、samlsp和登录应用(凭证收集和密码管理js客户端)之间的一系列请求/响应流程以提供web单点登录。idcs_requesthttpcookie用于维护sso和通道部件之间的各种请求/响应流程之间的状态。idcs_requestcookie的关键字将在sso和通道部件之间共享。登录应用和sso服务将经由rest端点相互交互。状态信息将作为json有效负载在它们之间传递。

请求行为

idcssso服务1002a处理以下不同类型的请求:(1)来自idcsop/idp服务1020a的请求;(2)来自idcssp服务1020a的请求;(3)来自登录应用的ajaxhttppost请求,从登录应用1042b提交认证凭证;(4)成功完成密码管理操作之后,来自登录应用1042b的ajaxhttppost请求;以及(5)成功完成post登录操作之后,来自登录应用1042b的ajaxhttppost请求。

来自op/idp服务1020a的请求将具有由op/idp提交给sso的请求+状态数据作为idcs_requesthttpcookie。该cookie将被保存为idcs主机cookie,并带有加密数据等。cookie的关键字将在op/idp/sso之间共享。关键字将是在租户创建操作期间初始化租户数据时创建的命名合理的关键字资源,如下所示:

1.rpid-由rp/sp表示的连接应用的id;

2.referrer(引用者)-用户浏览器被重定向到op/idp时的http引用者;

3.回调url-指回op/idp登录响应流程的url。

对于针对来自op/idp的请求的响应行为:

1.sso将使用登录应用状态来更新idcs_requestcookie,并重定向到登录应用以显示具有所有配置的登录选项的动态登录;

2.如果联合sso是唯一的选择,则sso自身将重定向到idcssp服务,以发起与远程idp的联合sso;

3.在idcs_session有效的情况下,sso将断言从idcs_sessioncookie中提取的用户。

a.断言用户失败后,sso将使用断言失败详细信息来更新idcs_requestcookie、移除idcs_sessioncookie、并且重定向到登录应用。登录应用将基于登录应用状态来显示带有自定义错误的登录页面。

b.断言成功后,(如果不存在)sso将使用通道注销详细信息来更新idcs_session、将idcs请求cookie的内容设置为idcs_reqquery(查询)/post参数、移除idcs请求cookie、并且重定向到存储在idcs_requestcookie中的idcs通道/callbackurl。

对于来自sp服务的请求,sp服务:

1.从idcs请求cookie中读取和移除saml-sp状态;

2.处理saml断言并将其映射到本地用户;

3.将联合sso操作的结果(状态,userid...)设置为ocis_req_spquery/post参数;

4.使用idcs_reqquery/post参数重定向到sso服务。

对于针对来自sp的请求的响应行为,在有效idcs_request具有sp状态的情况下,sso将检查sp状态:

1.如果sp状态的现状为“失败”,则sso将使用断言失败详细信息来更新idcs_requestcookie,并重定向至登录应用。登录应用将基于登录应用状态来显示带有自定义错误的登录页面。

2.如果sp状态的现状为“成功”,则sso将创建idcs_session,其中认证上下文检查它是否是idp发起的联合,并且post登录未启用,然后:

a.idcsssoinitiated:包含该流程是否由sso服务启动(布尔型)

b.如果为假(false),则sso服务将需要检查ssoresponsefedssoreturnurl

i.如果ssoresponsefedssoreturnurl为空,则sso服务将移除idcs请求cookie并重定向到myconsole

ii.否则,sso服务将移除idcs请求cookie并重定向到ssoresponsefedssoreturnurl

c.如果为真(true),sso服务将重定向到callbackurl,因为联合sso流程由idcssso服务启动。

3.如果启用post登录,则sso将把用户重定向到登录应用,其中登录应用状态使用指示它是post登录流程的标志来更新。

对于来自登录应用的提交认证凭证的请求,登录应用收集凭证并将凭证发布到sso服务rest端点。凭证作为json有效负载进行发送。

对于针对来自登录应用的提交认证凭证的请求的响应行为,sso将对发布的认证凭证进行认证,并且进行以下检查:

1.如果认证状态为“成功”,则sso将使用认证来创建idcs_session,并将用户重定向到idcs_request中的/callbackurl,或者基于特定于租户的配置向登录应用发送ajax响应。

2.如果认证状态为“失败”并且原因是“密码过期”,则sso将发送ajax响应,其中json有效负载具有密码管理状态以允许登录应用启动密码重置操作。状态包含用户身份信息和指示计划的操作是“对于过期密码的密码重置”的标志。

3.对于所有其他认证状态失败的原因,sso将发送ajax响应,其中json有效负载具有登录应用状态。登录应用将使用登录应用状态来显示自定义错误消息。

对于成功完成密码管理操作后来自登录应用的请求,登录应用收集新密码并且使用配置的特定于租户的策略规则验证来该密码。密码重置成功完成之后,登录应用会检查idcs_requestcookie的可用性。如果idcs_requestcookie可用,则它将ajaxpost请求发送到sso服务rest端点,其中json有效负载具有密码管理状态。如果idcs_requestcookie不存在,则登录应用将重定向到idcs管理控制台url。

对于针对成功完成密码管理操作后来自登录应用的请求的响应行为,sso将在密码管理状态下断言用户信息:

1.如果断言导致失败,则sso将向登录应用状态发送ajax响应,其中失败详细信息作为json有效负载。

2.如果断言导致成功,则sso将创建idcs_session,如果不post登录,则将用户重定向到idcs_request中的/callbackurl,或者将其中登录应用状态为json有效负载的ajax响应发送到登录应用以显示post登录页面。

对于成功完成post登录操作之后来自登录应用的请求,登录应用显示post登录页面并处理post登录相关操作。post登录操作成功完成后,登录应用发送ajaxpost请求,其中带有指示成功的post登录操作的标志的登录应用状态作为json有效负载。如果idcs_requestcookie不存在,则登录应用将重定向到idcs管理控制台url。

对于针对成功完成post登录操作之后来自登录应用的请求的响应行为,sso将检查登录应用在登录应用状态下是否设置了post登录标志。如果已设置,则:

1.idcsssoinitiated:包含该流程是否由sso服务启动(布尔型)

a.如果为假(false),则sso服务将需要检查ssoresponsefedssoreturnurl

i.如果ssoresponsefedssoreturnurl为空,则sso服务将移除idcs请求cookie并重定向到myconsole

ii.否则,sso服务将移除idcs请求cookie并重定向到ssoresponsefedssoreturnurl

b.如果为真(true),sso服务将重定向到callbackurl,因为联合sso流程由idcssso服务启动。

如所公开的,实施例提供sso服务,该服务规定如何认证用户以及如何执行登录仪式。登录可以基于不同类型的认证因素配置(例如,一个因素、两个因素、生物特征等)。该实施例是模块化的(不是单片代码),并且包括控制器层,并且每个特定认证都被实现为插件(例如,可以用于向ldap认证的用户id密码的插件模块、用于向证书存储库认证的x.509认证的插件模块、基于sms的移动因素的移动认证的插件、基于qr码的注册的插件等)。在一个实施例中,sso系统包括服务提供商接口(“spi”)层,认证模块可以插入其中。该实施例编排了ui提交要验证的凭证的流程。该实施例执行sso功能,而不管协议层是openidconnect、saml还是oauth等。该实施例提供sso服务作为登录和注销流程的整个idcs访问的中央控制器,并使用丰富的、优化的和归一化的状态来使服务对所有协议不可知。一个实施例提供向不同的身份存储库(例如,远程idp、本地身份存储库等)断言用户的功能。

单点注销(“slo”)

一个实施例提供了全局注销过程,该过程对于用于保护每个应用的协议是不可知的。在一个实施例中,注销过程可以触发从每个协议端点注销,并且还触发从每个协议正在保护的实际应用注销。

例如,在一个实施例中,当存在若干应用受oauth保护时,oauth服务到达sso服务以获得整个全局会话和全局状态。全局状态保持为映射,并包括来自每个协议的归一化状态。对于每个协议,全局状态保存要返回的端点和协议保护的已访问url。sso注销不仅可以触发协议注销,还可以触发从每个应用注销、注销图像或注销端点。

在一个实施例中,在每次注销之后,控制返回到sso服务(即,请求流程返回到sso服务),使得该实施例可以提供新颖的中央注销控制器。例如,注销可以从应用端点开始,然后转到相应的协议。然后,协议进入sso服务,并且sso服务触发从协议注销以及从受协议保护的所有受访应用注销。一旦完成上述步骤,控制就再次回到sso服务。

然后,sso服务确定在全局状态中是否还有sso服务需要用以触发注销以便完成全局注销的其他任何东西。例如,如果完成了对于oauth的注销,则sso服务将确定是否对于另一个协议尚未完成注销。下一个协议可能是例如saml。所有这些信息都处于归一化全局状态。

如果需要注销的下一个协议是saml,则sso服务以类似的方式触发saml注销(例如,协议注销、实际被访问的状态协议或应用的注销等)。完成saml注销时,控制再次回到sso服务,并且sso服务确定要触发的下一个协议注销。因而,sso服务持续触发对于所有协议和所有被访问应用的注销(如在全局状态中标识的)以完成全局注销。

一个实施例在全局状态下安全地存储归一化注销端点信息。一个实施例不存储所有注销重定向url,而替代地存储指向具有访问权限的每个客户端的指针。一般而言,oauth和saml都包括为个体应用存储注销重定向url的规定。当oauth应用访问oauth服务时,对应的客户端id被跟踪并保存在sso会话中相应的特定部件中。类似地,当saml应用访问saml服务时,相应的spid被跟踪并保存在sso会话中相应的特定部件中。当全局注销url(例如,通过访问sso全局注销url、应用注销url中的一个等)被触发时,控制总是会回到sso服务。然后,sso服务移除全局会话、更新会话cookie,同时将到期时间设置为当前时间以便它不再被使用、并且使得每个部件注销。

一个实施例确保控制在每次注销后返回到sso服务。为此,当触发注销时,该实施例确定已经作为会话的一部分被访问或跟踪的应用列表、将注销url构建为嵌入在html页面中的图像源、并将最后一个图像源配置为sso的重定向url。一旦这个虚拟(dummy)html页面作为响应被发送给用户浏览器并且html页面被加载,图像源就被异步加载。因为每个图像源都是注销url,所以会触发注销,并且响应包括设置的cookie调用,这些调用取消设置每个个体应用的cookie。由于最后一个图像的一部分是sso的重定向url,因此本实施例异步调用sso服务,并且请求流程返回到sso服务。

在一个实施例中,一旦sso服务发送该html页面以及已经对其触发注销的部件列表,该sso服务就移除这些部件。因此,下一次控制返回到sso服务时,它知道已经注销了什么以及还有什么需要注销,并且该过程继续直到列表为空为止。

因此,一个实施例通过将不同应用的不同注销端点组织成图像、将其嵌入到html页面中、将协议重定向到该页面以便加载所有图像并遵循注销url、并且还嵌入图像以返回到sso服务,以触发全局注销。不同应用的不同注销端点可以基于不同的协议,例如saml、oauth等。

例如,在一个实施例中,当最终用户具有受oauth保护的若干应用时,sso服务建立全局会话。在访问这些应用的同时,用户还可能具有受到基于同一全局会话的saml令牌的保护的若干其他应用。一旦用户从这些应用(saml或oauth)中的任何一个注销并希望全局注销,则无论其协议如何,用户都将从所有应用注销。

在一个实施例中,对于saml,可能存在远程idp认证。idp是可能希望调用其自己注销的外部一方。在这种情况下,该实施例实现了在请求cookie中指示saml调用的注销的信息。因而,该实施例提供了能够调用远程认证注销的功能。

在一个实施例中,ssocookie是仅针对idcs主机的安全主机cookie,并且是事实的来源。除了idcs部件,没有其他实体接收主机cookie。相反,相应的令牌被生成并被提供给idcs外部的应用。

登录/注销流程

图11是在一个实施例中由idcs提供的sso功能的消息序列流程1100。当用户使用浏览器1102访问客户端1106(例如,基于浏览器的应用或移动/本机应用)时,云门1104充当应用强制实施点并执行在本地策略文本文件中定义的策略。如果云门1104检测到用户没有本地应用会话,则需要对用户进行认证。为了这样做,云门1104将浏览器1102重定向到oauth2微服务1110,以发起针对oauth2微服务1110的openidconnect登录流程(范围=“openid简档”的三参与方az授予流程)。

浏览器1102的请求遍历idcs路由层web服务1108和云门1104并到达oauth2微服务1110。oauth2微服务1110构造应用上下文(即,描述应用的元数据,例如,连接应用的身份、客户端id、配置,应用可以做什么等),并将浏览器1102重定向到sso微服务1112以便登录。

如果用户具有有效的sso会话,则sso微服务1112验证现有会话而不开始登录仪式。如果用户不具有有效的sso会话(即,不存在会话cookie),则sso微服务1112根据客户的登录偏好(例如,显示有品牌的登录页面)来发起用户登录仪式。为了这样做,sso微服务1112将浏览器1102重定向到以javascript实现的登录应用服务1114。登录应用服务1114在浏览器1102中提供登录页面。浏览器1102将restpost发送到包括登录凭证的sso微服务1112。sso微服务1112生成访问令牌并将其发送到restpost中的云门1104。云门1104将认证信息发送到管理scim微服务1116,以验证用户的密码。管理scim微服务1116确定成功的认证,并向sso微服务1112发送对应的消息。

在一个实施例中,在登录仪式期间,登录页面不显示同意页面,因为“登录”操作不需要进一步的同意。相反,在登录页面上声明隐私政策,以通知用户关于向应用暴露的某些简档属性。在登录仪式期间,sso微服务1112尊重客户的idp偏好,并且如果被配置,则重定向到idp,以针对经配置的idp进行认证。

在成功认证或验证后,sso微服务1112利用包含用户的认证令牌的新创建/更新的sso主机httpcookie(例如,在由“hosturl”指示的主机的上下文中创建的cookie)将浏览器1102重定向回到oauth2微服务1110。oauth2微服务1110将az代码(例如,oauth概念)返回给浏览器1102并重定向到云门1104。浏览器1102将az代码发送到云门1104,并且云门1104将restpost发送到oauth2微服务1110,以请求访问令牌和身份令牌。这两个令牌都被限定到oauth微服务1110(由受众令牌声称来指示)。云门1104从oauth2微服务1110接收令牌。

云门1104使用身份令牌将用户的经认证的身份映射到其内部账户表示,并且它可以将这个映射保存在其自己的httpcookie中。然后,云门1104将浏览器1102重定向到客户端1106。然后浏览器1102到达客户端1106,并从客户端1106接收对应的响应。从这个时候开始,浏览器1102可以无缝地访问应用(即,客户端1106),只要该应用的本地cookie是有效的就可以。一旦本地cookie失效,认证处理就重复。

云门1104还使用在请求中接收的访问令牌来从oauth2微服务1110或scim微服务获得“userinfo”。访问令牌足以访问用于“profile(简档)”作用域允许的属性的“userinfo”资源。经由scim微服务访问“/me”资源也是足够的。在一个实施例中,默认情况下,接收到的访问令牌仅适用于在“profile”范围下所允许的用户简档属性。访问其它简档属性是基于由云门1104发布的az授予登录请求中提交的附加(可选)范围来授权的。

当用户访问另一个oauth2集成的连接应用时,重复相同的处理。

在一个实施例中,sso集成架构使用相似的openidconnect用户认证流程来进行基于浏览器的用户注销。在一个实施例中,具有现有应用会话的用户访问云门1104,以发起注销。可替代地地,用户可能已经在idcs侧发起了注销。云门1104终止特定于该应用的用户会话,并且发起针对oauth2微服务1110的oauth2openid提供者(“op”)注销请求。oauth2微服务1110重定向到杀死用户的主机ssocookie的sso微服务1112。sso微服务1112针对如在用户的ssocookie中被跟踪的已知注销端点发起重定向的集合(oauth2op和samlidp)。

在一个实施例中,如果云门1104使用saml协议来请求用户认证(例如,登录),则在saml微服务和sso微服务1112之间开始相似的处理。

云高速缓存

一个实施例提供被称为云高速缓存的服务/能力。在idcs中提供云高速缓存,以支持与基于ldap的应用(例如,电子邮件服务器、日历服务器、一些业务应用等)的通信,因为idcs不根据ldap进行通信,而此类应用被配置为仅基于ldap进行通信。通常,云目录经由restapi暴露,并且不根据ldap协议进行通信。一般而言,管理跨公司防火墙的ldap连接需要特殊的配置,这些配置难以建立和管理。

为了支持基于ldap的应用,云高速缓存将ldap通信转化为适合与云系统进行通信的协议。一般而言,基于ldap的应用经由ldap使用数据库。应用可以可替代地被配置为经由诸如sql之类的不同协议来使用数据库。但是,ldap在树结构中提供资源的分层表示,而sql将数据表示为表和字段。因而,ldap可能更适合搜索功能,而sql可能更适合于事务功能。

在一个实施例中,由idcs提供的服务可以在基于ldap的应用中使用,以例如认证应用的用户(即,身份服务)或者为该应用强制实施安全策略(即,安全服务)。在一个实施例中,与idcs的接口是通过防火墙并基于http(例如,rest)的。通常,公司防火墙不允许访问内部ldap通信,即使通信实现了安全套接字层(“ssl”),并且不允许通过防火墙暴露tcp端口。但是,云高速缓存在ldap和http之间进行转化,以允许基于ldap的应用到达由idcs提供的服务,并且防火墙将对http开放。

一般而言,ldap目录可以在一系列业务(诸如营销和开发)中使用,并且定义用户、组、工作等。在一个示例中,营销和开发业务可以具有不同的有针对性的客户,并且对于每个客户,可以有其自己的应用、用户、组、工作等。可以运行ldap高速缓存目录的一系列业务的另一个示例是无线服务提供者。在这种情况下,由无线服务提供者的用户进行的每个呼叫都针对ldap目录来认证用户的设备,并且ldap目录中的对应信息中的一些可以与计费系统同步。在这些示例中,ldap提供了在运行时在物理上隔离正在被搜索的内容的功能。

在一个示例中,无线服务提供者可以在使用由idcs提供的服务以支持短期营销活动的同时处理用于其核心业务(例如,常规呼叫)的自己的身份管理服务。在这种情况下,当云高速缓存具有它针对云运行的单个用户集合和单个组集合时,云高速缓存将“扁平化”ldap。在一个实施例中,可以在idcs中实现任何数量的云高速缓存。

分布式数据网格

在一个实施例中,idcs中的高速缓存集群是基于分布式数据网格来实现的,如在例如编号为2016/0092540的美国专利公开中所公开的,其公开内容通过引用并入本文。分布式数据网格是一种系统,其中计算机服务器的集合在一个或多个集群中一起工作,以管理分布式或集群环境中的信息和相关操作(诸如计算)。分布式数据网格可以被用于管理跨服务器共享的应用对象和数据。分布式数据网格提供低响应时间、高吞吐量、可预测的可伸缩性、持续可用性和信息可靠性。在特定的示例中,分布式数据网格(诸如来自oracle公司的oraclecoherence数据网格)存储存储器中的信息,以实现更高的性能,并且在保持那种信息的副本跨多个服务器同步时采用冗余,从而在服务器发生故障的情况下确保系统的弹性和数据的持续可用性。

在一个实施例中,idcs实现诸如coherence之类的分布式数据网格,使得每个微服务可以请求访问共享的高速缓存对象而不被阻塞。coherence是专有的基于java的存储器内数据网格,其被设计为具有比传统的关系型数据库管理系统更好的可靠性、可伸缩性和性能。coherence提供了对等(peertopeer)(即,没有中央管理器)、存储器内的分布式高速缓存。

图12图示了分布式数据网格1200的示例,其存储数据并向客户端1250提供数据访问并实现本发明的实施例。“数据网格集群”或“分布式数据网格”是包括多个计算机服务器(例如,1220a、1220b、1220c和1220d)的系统,这些多个计算机服务器在一个或多个集群(例如,1200a、1200b、1200c)中一起工作,以在分布式或集群环境中存储和管理信息和相关操作(诸如计算)。虽然分布式数据网格1200被示为在集群1200a中包括四个服务器1220a、1220b、1220c、1220d,具有五个数据节点1230a、1230b、1230c、1230d和1230e,但是分布式数据网格1200可以包括任意数量的集群以及每个集群中任意数量的服务器和/或节点。在实施例中,分布式数据网格1200实现本发明。

如图12中所示,分布式数据网格通过在一起工作的多个服务器(例如,1220a、1220b、1220c和1220d)上分布数据来提供数据存储和管理能力。数据网格集群的每个服务器可以是常规的计算机系统,诸如像具有一到两个处理器插槽和每个处理器插槽两到四个cpu核心的“商品x86”服务器硬件平台。每个服务器(例如,1220a、1220b、1220c和1220d)被配置有一个或多个cpu、网络接口卡(“nic”)和存储器,其中存储器包括例如至少4gb的ram,高达64gbram或更多。服务器1220a被示为具有cpu1222a、存储器1224a和nic1226a(这些元件在其它服务器1220b、1220c、1220d中也存在,但未示出)。可选地,每个服务器也可以提供有闪存(例如,ssd1228a),以提供外溢(spillover)存储容量。在被提供时,ssd容量优选地是ram的尺寸的十倍。数据网格集群1200a中的服务器(例如,1220a、1220b、1220c、1220d)使用高带宽nic(例如,pci-x或pcie)连接到高性能网络交换机1220(例如,千兆以太网或更好)。

集群1200a优选地包含最少四个物理服务器,以避免在故障期间丢失数据的可能性,但是典型的安装具有多得多的服务器。每个集群中存在的服务器数量越多,故障转移和故障回复的效率越高,并且服务器故障对集群的影响更小。为了最小化服务器之间的通信时间,每个数据网格集群理想地限于提供服务器之间的单跳通信的单个交换机1202。因此,集群可以受到交换机1202上的端口数量的限制。因此,典型的集群将包括4至96个物理服务器。

在分布式数据网格1200的大多数广域网(“wan”)配置中,wan中的每个数据中心具有独立但互连的数据网格集群(例如,1200a、1200b和1200c)。wan可以例如包括比图12中所示的多得多的集群。此外,通过使用互连但独立的集群(例如,1200a、1200b、1200c)和/或在彼此远离的数据中心中定位互连但独立的集群,分布式数据网格可以保护到客户端1250的数据和服务,防止由于自然灾害、火灾、洪水、延长的掉电等造成的一个集群中的所有服务器的同时丢失。

一个或多个节点(例如,1230a、1230b、1230c、1230d和1230e)在集群1200a的每个服务器(例如,1220a、1220b、1220c、1220d)上操作。在分布式数据网格中,节点可以是例如软件应用、虚拟机等,并且服务器可以包括节点在其上操作的操作系统、管理程序等(未示出)。在oraclecoherence数据网格中,每个节点都是java虚拟机(“jvm”)。取决于服务器上可用的cpu处理能力和存储器,可以在每个服务器上提供多个jvm/节点。可以根据分布式数据网格的需要添加、开始、停止和删除jvm/节点。运行oraclecoherence的jvm在被开始时自动加入集群。加入集群的jvm/节点被称为集群成员或集群节点。

每个客户端或服务器包括用于传送信息的总线或其它通信机制,以及耦合到总线以用于处理信息的处理器。处理器可以是任何类型的通用或专用处理器。每个客户端或服务器还可以包括用于存储要由处理器执行的信息和指令的存储器。存储器可以由随机存取存储器(“ram”)、只读存储器(“rom”)、诸如磁盘或光盘的静态存储器或任何其它类型的计算机可读介质的任意组合组成。每个客户端或服务器还可以包括通信设备,诸如网络接口卡,以提供对网络的访问。因此,用户可以直接与每个客户端或服务器进行对接,或者通过网络或其它任何方式进行远程对接。

计算机可读介质可以是可由处理器访问的任何可用介质,并且包括易失性和非易失性介质、可移动和不可移动介质以及通信介质。通信介质可以包括计算机可读指令、数据结构、程序模块或者经调制的数据信号(诸如载波或其它传输机制)中的其它数据,并且包括任何信息传递介质。

处理器还可以经由总线耦合到显示器,诸如液晶显示器(“lcd”)。键盘和光标控制设备(诸如计算机鼠标)也可以耦合到总线,以使得用户能够与每个客户端或服务器进行交互。

在一个实施例中,存储器存储在由处理器执行时提供功能的软件模块。这些模块包括为每个客户端或服务器提供操作系统功能的操作系统。这些模块还可以包括用于提供云身份管理功能以及本文公开的所有其它功能的云身份管理模块。

客户端可以访问web服务,诸如云服务。在一个实施例中,web服务可以在来自oracle公司的weblogic服务器上实现。在其它实施例中,可以使用web服务的其它实现。web服务访问存储云数据的数据库。

如所公开的,实施例实现了基于微服务的架构,以提供基于云的多租户iam服务。在一个实施例中,每个请求的身份管理服务都被分成实时任务和近实时任务,实时任务由中间层中的微服务处理,而近实时任务被卸载到消息队列。因而,实施例提供了云规模的iam平台。

图13是根据实施例的基于云的iam功能的流程图1300。在一个实施例中,图13的流程图的功能由存储在存储器或其他计算机可读或有形介质中的软件来实现,并由处理器执行。在其他实施例中,功能可以(例如,通过使用专用集成电路(“asic”)、可编程门阵列(“pga”)、现场可编程门阵列(“fpga”)等)由硬件来执行,或者由硬件和软件的任意组合来执行。

在1302处,接收对被配置为允许访问应用的身份管理服务的第一请求。例如,在一个实施例中,第一请求由诸如本文所描述的云门(例如参考图6中的web路由层610和/或图7中的云门702)的安全门接收。在一个实施例中,第一请求包括对标识身份管理服务的api和被配置为执行身份管理服务的微服务的调用。在一个实施例中,微服务是能够与其他模块/微服务进行通信的自包含模块,并且每个微服务具有可以被其它微服务联系的未命名的通用端口。例如,在一个实施例中,各种应用/服务602可以对idcsapi进行http调用以使用idcs微服务614,如图6所示。在一个实施例中,微服务是运行时部件/进程。

在1304处,第一请求被发送到微服务,其中微服务通过生成令牌来执行身份管理服务,其中微服务至少部分地通过向单次登录微服务发送第二请求来生成令牌,并且其中单次登录微服务被配置为跨基于不同协议的不同微服务来提供单次登录功能。

在1306处,从微服务接收令牌,并且在1308处,令牌被提供给应用,其中令牌允许访问应用。

图14是图示了根据一个实施例的部件的各种功能和cookie传播功能的注销流程。图14中涉及的部件或层包括最终用户客户端(或依赖方(party)1(“rp1”))1401、oidc层1402、sso层1403和saml层1404。图14涉及注销和清除cookie。

在1420处,客户端1401通常通过注销url触发注销。在1421处,oidc1402将客户端1401的返回url存储在cookie(例如,idcs_reqcookie)中,该cookie存储在客户端1401的对应浏览器上。返回url可以是客户端1401的最终成功注销登陆(landing)页面。

在1429处,清除认证上下文。在1430处,从ssocookie的部件数据映射中清除sso部件条目。在1431处,确定部件数据映射中是否存在oauth条目。

如果在1431处为“是”,则html303重定向到oidc1402层,并且在1423处读取oauth条目值并检索clientid。

在1424处,提取对应于clientid的注销url。在一个实施例中,客户端api用于查询特定clientid的注销url。在1425处,从ssocookie的部件数据映射中清除oauth部件。在1427处,使用图像标签生成html响应,其中src属性设置为rp的注销url。最后一个图像标签将具有被设置为sso服务注销url的src属性。在1428处,当执行具有被设置为sso服务端点的src属性的最后一个图像标签的同时,呈现html响应。新的httpget请求将被发送到sso服务注销端点。html302重定向将功能移动到sso层1403,其中功能在1429处继续。

如果在1431处为“否”,则在1432处确定部件数据映射中是否存在saml条目。如果在1432处为“是”,则在1433处确定在cookie中saml注销标志(“logoutsamlinvoke”)是否被设置为真。如果在1433处为“否”,则在1434处从cookie读取注销重定向url值。如果在1432处为“否”,则也执行1434。

在1435处,确定注销重定向url值是否为空。如果在1435处为“是”,则在1436处从ssosettings提取租户的注销登陆页面。如果在1435处为“否”,或者在1436之后,在1437处确定是否跳过saml注销。

如果在1437处为“是”,则在1438处,html302重定向至注销重定向url(如果存在的话),或者从ssosettings重定向至租户注销登陆页面。重定向将指向客户端1401的注销登陆页面。然后,在1426处,在客户端1401呈现注销页面。如果在1437处为“否”,则在1439处移除未设置的cookie,然后功能移动到1438处。

如果在1433处为“是”,则在1442处,向saml1404层的html300重定向执行saml注销并触发连接的sp的注销。在1441处,saml条目然后从ssocookie的部件数据映射中被移除,并且功能移动到sso层1403至1429。

在1442处示出了具有查询参数的从saml-sp到sso服务的重定向url的示例(具有成功的saml断言),例如可以是:http://host.us.oracle.com:8990/sso/v1/user/login?ocis_req_sp=kerrx9mny1swxvcv5ohveljwl0pjai5ylbnhzrnkk88xd。sso将插入了“ocis_req”的请求参数发送到协议/通道部件。从saml到sso,,它是如上所示的“ocis_req_sp”。当idcs被配置为使用内部idp对用户进行认证时,该重定向会发生。在idp成功质询用户后,idp使用saml断言以将用户重定向到idcssamlsp。idcssamlsp验证saml断言并将用户映射到idcs用户记录。idcssamlsp将saml的部件数据保存在idcs会话cookie“ora_ocis”中。然后,idcssamlsp将用户重定向到sso,并在ocis_req_spquery/post参数中提供用户数据作为从saml到sso的302/postform重定向的一部分。从sso向samlidp或oauthidp通信时使用ocis_reqquery/form参数,而从samlsp向sso通信时使用ocis_req_spquery/form参数。

以下是根据一个实施例由samlsp服务执行的步骤,其由sso服务用来发起与联合saml身份提供者的交互。sso服务将确定如何对用户进行认证。一种可能性是使用联合sso对用户进行认证:换言之,将用户认证委派给远程idp,可以是内部idp,也可以是客户使用的云服务idp。

当sso服务将用户重定向到联合服务时,sso模块必须能够指示:

●哪个samlidp应该用于联合sso。

当联合服务将用户返回到sso部件时,必须提供以下信息:

●userid;

●认证时间;

●到期时间;

●联合消息属性;

●idp合作伙伴名称。

在认证请求期间的运行时,sso服务将:

●通过使用cookie管理器,将saml服务所请求的数据存储在请求cookie中

○ssorequestfedssoidp:远程idp的id。

●将用户重定向到saml服务认证url(http://tenant-hostname/fed/v1/user/request/login)。

在认证请求期间的运行时,saml服务将:

●读取请求cookie以提取和移除由sso服务设置的数据

○ssorequestfedssoidp:远程idp的id。

●读取请求cookie以提取而不移除下列数据

○ssoecid:oauth/saml-idp服务设置的ecid。

saml将使用该数据来记录事件。

●使用远程idp来启动联合sso;

●验证传入的saml断言并将其映射到saml用户;

●在sessioncookie中写入以存储联合数据;

●不要触及现有的请求cookie;

●联合sso操作后的saml-sp将创建描述联合sso操作的结果的sosexternalidpresponset:

○ssoresponsefedssostatus:指出状态的字符串

■success意味着成功;

■任何其他字符串都是saml错误代码(例如:error.samlsrv.sp.sso.bindingunknown)。

○ssoresponsefedssouserid:如果操作成功,则此字段将包含用户guid(字符串)。

○ssoresponsefedssoidp:如果操作成功,则此字段将包含idp合作伙伴名称(字符串)。

○ssoresponsefedssonameid:如果操作成功,则此字段将包含saml断言nameid(字符串)。

○ssoresponsefedssoreturnurl:如果操作成功,并且如果流程未由sso服务发起,则此字段将包含用户需要被重定向的url(字符串)。

○ssoresponsefedssoassertionattributes:如果操作成功,则此字段将包含saml断言属性(映射)。

○ssoresponsefedssotimeout:如果操作成功,则此字段将包含idp会话超时(长整型)。

○ssoecid:包含ecid。

○idcsssoinitiated:包含该流程是否由sso服务启动(布尔型)

■如果为假(false),则sso服务将需要检查ssoresponsefedssoreturnurl

●如果ssoresponsefedssoreturnurl为空,则sso服务将移除idcs请求cookie并重定向到myconsole;

●否则,sso服务将移除idcs请求cookie并重定向到ssoresponsefedssoreturnurl;

■如果为真(true),则sso服务将重定向到callbackurl,因为联合sso流程由idcssso服务启动。

●例如,从saml-sp到sso服务的重定向url将是:“http://host.us.oracle.com:8990/sso/v1/user/login?ocis_req_sp=kerrx9mny1swxvcv5ohveljwl0pjai5ylbnhzrnkk88xd...”在认证响应期间的运行时,sso服务将:

●sso服务将检索查询参数ocis_req_sp的值,并对其进行解码,并由saml服务读取数据集

○ssoresponsefedssostatus:success指示成功,failure将带来错误代码(例如,error.samlsrv.sp.sso.assertion.nouserreturnedvianameid)ssoresponsefedssouserid:在成功的情况下的idcsuserid;

○ssoresponsefedssoidp:远程idp的id;

○ssoresponsefedssotimeout:idp会话超时的时间(秒)(设置为-1);

○ssoresponsefedssonameid:在saml断言nameid字段中使用的标识符;

○ssoresponsefedssoreturnurl:sso服务创建idcs会话后用户应该被重定向到的url。此参数仅在idp启动的sso流程期间被设置;

○ssoresponsefedssoassertionattributes:samlsso断言中包含的属性列表。

●读取请求cookie以提取并移除它:

○ssoecid:oauth/saml-idp服务设置的ecid。它将被sso用于记录事件;

○rpid,rpname。

●为用户创建idcs会话并将数据存储在会话cookie中

●将用户重定向到:

●idcsssoinitiated:包含该流程是否由sso服务启动(布尔型)

○如果为假(false),则sso服务将需要检查ssoresponsefedssoreturnurl;

■如果ssoresponsefedssoreturnurl为空,则sso服务将移除idcs请求cookie并重定向到myconsole;

■否则,sso服务将移除idcs请求cookie并重定向到ssoresponsefedssoreturnurl。

○如果为真(true),则sso服务将重定向到callbackurl,因为联合sso流程由idcssso服务启动。

在一个实施例中,用于执行slo的sso功能/步骤如下:

1.从会话cookie中移除用户会话,即authncontext。

2.对于部件数据中的oauth条目(如果存在的话),重定向到oauth注销端点。

3.oauth/oidc从客户端id提取rp的注销url,从部件数据中清除oauth条目,产生具有不同rp注销url的html源(异步过处理),最后返回到sso注销(最后一个imgsrc是sso注销)。

4.sso检查部件数据中的saml条目,如果存在,则检查idcs_reqcookie中的“不调用saml标志”,如果设置为true或不存在,则通过重定向委派到saml/logout,saml完成其sp注销流程、清除部件数据中的saml条目并返回sso/logout。

5.saml服务启动saml2.0注销协议操作,并将用户重定向到各个远程联合伙伴进行注销。

6.一旦完成,saml服务就从idcs会话cookie中删除saml数据。

7.saml服务将用户重定向到sso服务(来自sso服务的urltbd)。

8.sso注销获取“返回url”、清除会话cookie(如果存在的话,则不得移除saml部件数据)、并且最后重定向到“返回url”。如果“返回url”不存在,则重定向到特定于租户的注销登陆页面。

在一个实施例中,微服务被配置为基于协议提供认证功能。在一个实施例中,协议是oauth或saml,并且单点登录微服务被配置为跨oauth和saml提供单点登录功能。在一个实施例中,单点登录微服务生成被配置为会话cookie的全局会话,并向微服务提供全局会话。在一个实施例中,微服务将全局会话转换为令牌。在一个实施例中,单点登录微服务将第二请求的请求参数归一化。

在一个实施例中,应用被配置为由包括该租赁在内的多个租赁使用。在一个实施例中,微服务是无状态的,并从数据库检索数据以执行身份管理服务。在一个实施例中,数据库和微服务被配置为彼此独立地伸缩。在一个实施例中,数据库包括分布式数据网格。

如所公开的,实施例提供了多租户、云规模的iam,其通过实现全局会话并将全局会话转换为适当的协议令牌来跨各种协议提供sso功能。进一步地,实施例使用cookie和重定向来为所有应用执行slo功能。

本文具体地示出和/或描述了若干实施例。但是,应当认识到的是,在不背离本发明的精神和预期范围的情况下,所公开的实施例的修改和变化被上述教导涵盖并在所附权利要求的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1