在深入探讨之前,让我们看一下有关Java Identity API JSR 351的一些快速事实。 这仍在进行中。 。 。
- JSR是什么时候发起的?
该JSR在2011年10月通过了批准投票,随后在2011年11月成立了专家组。
- 谁负责此规范?
Java Identity API由Ron Monzillo领导。
- 专家组?
专家组由来自Oracle,IBM,RedHat,SAP和GoldmanSachs的代表以及个人组成。
- 规格文件?
这仍处于起草阶段,可以通过以下网址获得: https : //jcp.org/aboutJava/communityprocess/edr/jsr351/index.html
- 参考实施
Nobis是Java Identity API的RI,可以在以下位置访问: https : //java.net/projects/nobis/pages/Home
介绍
如果必须单行解释Java Identity API背后的动机,那么它将被定义为Identity Management的Java标准。
总体而言 ,该标准的主要目标是:
- 在Java中定义一个Identity的表示形式。
- 通过定义身份使用者和提供者之间的标准API和交互模型,促进这些“身份”的安全使用(创建,交换,治理) 。
- 提供统一,高级的编程模型,供应用程序与具有异构域模型的身份/属性存储库进行交互。
目前的挑战
当前,Java平台不提供用于管理身份的标准接口。 随着互联网服务在日常应用中的使用日益增加,SSO的采用和联合,需要保护网络身份。 现有的Java对象(例如X509Certificate和KerberosTicket)为封装身份属性提供了相似的外观,但仅限于有限的范围。 代替具有完全不同且非标准的模型,需要制定一套标准,应用程序或身份框架开发人员可以利用这些标准为网络身份的传播和使用提供坚如磐石的支持。
一个简单的类比
我喜欢将其视为类似于JDBC或JNDI (如果不相同)的API。 这两个API都可以帮助开发人员通过标准接口以松散耦合的方式与基础数据源或命名服务进行通信。 它使我们能够采用可插拔的体系结构,其中可以利用不同的供应商实现方式来连接不同的数据库(Oracle,MySQL,Sybase DB2 ...我们真的不在乎,除了在我们的类路径中使用供应商JARS),LDAP服务器( AD,OID,Sun Java,Apache等)。
Java Identity API如何提供帮助?
该API将:
- 允许应用程序以可移植和标准的方式与异构基础身份存储库进行交互。
- 允许供应商使用属性服务框架开发实现,以与一个或多个存储库(如Facebook , Twitter ,通过受支持的协议/ API(如OAUTH , Open ID , FaceBook Connect等) 链接的属性)进行无缝交互。
- 使应用程序还可以充当属性的提供者–这也是属性服务框架的一部分。
- 允许最终开发人员在这些实现之上构建应用程序。
- 防止依赖非标准专有实现在应用程序内实现身份服务。
突出特点
下面列出了此API的一些关键功能/重点:
- 与Java SE 6和Java EE 6的兼容性
- 与Java安全模型集成
Java安全性模型中的现有对象(例如Principal,Subject,Policy等)将集成在API中:
- 支持编程以及注释驱动的编程模型
- 利用上下文和依赖注入(CDI)
CDI将通过限定符和生产者提供诸如资源注入,生命周期回调以及身份属性和引用的依赖注入等服务。
关键术语
全新的规范通常可以引入一些术语或表达,这些术语或表达一开始听起来可能比较模糊或抽象。 这是与Java Identity API紧密相关的关键字和概念的列表。 对这些术语有基本的了解很重要。
术语 | 描述 |
实体 | 除了“属性 ”的集合外,例如某人可以具有诸如名字,姓氏,SSN,电子邮件等属性。 |
属性 | 它具有名称 (用户名,电子邮件), 值 (johndoe,jdoe @ test.com)和关联的元数据 (发布者,有效期) |
实体参考 | 实体的安全句柄 |
属性参考 | 属性本身的安全 , 独立于值的句柄注意 :实体引用和属性引用都便于交换, 而无需实际暴露关联的值 |
属性存储库 | 表示要与身份源集成以实现的一组合同 。 包含与最终身份存储库交互的业务逻辑 |
仓库代理 | 它绑定到特定的属性存储库,并且可以查询以提供附加到该属性存储库的句柄 |
储存库描述符 | 描述关系 b / wa Repository Agent和绑定到该代理的Attribute Repository |
属性提供者 | 与存储库 代理进行交互并代表其执行用户请求的操作 |
属性服务 | 这是一个服务组件,直接向客户端应用程序公开。 它提供对高级界面的访问,以与身份交互和管理身份 |
核心API
Java Identity API非常轻巧且紧凑 。 构成核心编程接口一部分的软件包已在下面突出显示。
包 | 描述 |
javax.security.identity | 该软件包包含标识属性和引用类型 |
javax.security.identity.annotations | 包含有助于提供可移植身份编程模型的注释 |
javax.security.identity.auth | 包含在Java Subject或AccessControlContext中使用的标识属性和引用类型。 |
javax.security.identity.client | 为身份属性服务提供高级编程接口。 |
javax.security.identity.client.expression | 包含用于构成属性查询的独立于提供程序的表达式。 |
javax.security.identity.client.qualifiers | 定义在身份属性的CDI注入中用作限定符的注释。 |
javax.security.identity.permission | 包括用于保护属性服务的接口的权限和操作值。 |
javax.security.identity.provider | 包含将由属性提供程序和存储库代理实现的接口。 |
以下突出显示了Java Identity API的一些重要注释,接口和类:
注解
零件 | 等效的API |
身分识别 | javax.security.identity.annotations.IDEntity |
属性 | javax.security.identity.annotations.IdentityAttribute |
实体参考 | javax.security.identity.annotations.EntityReference |
接口和类
零件 | 等效的API |
属性 | javax.security.identity.IDAttribute |
实体参考 | javax.security.identity.IDEntityReference |
属性参考 | javax.security.identity.IDAttributeReference |
属性存储库 | javax.security.identity.provider。 AttributeRepository |
属性提供者 | javax.security.identity.provider.AttributeProvider |
仓库代理 | javax.security.identity.provider.RepositoryAgent |
储存库描述符 | javax.security.identity.client.RepositoryDescriptor |
API使用概述
应用程序需要访问基础存储库才能与其进行交互并执行操作。 下面的示例概述了步骤的顺序,突出了应用程序可以利用API来获取基础标识和属性的句柄的方式:
- javax.security.identity.client.LookupService接口的具体实现。 这封装了javax.security.identity.client.ProviderLookupService和javax.security.identity.provider.AttributeLookupService的服务
- 通过将LookupService与javax.security.identity.provider.RepositoryAgent的实现绑定,可以获取javax.security.identity.client.ProviderLookupContext的实例。
- ProviderLookupContext用于获取对javax.security.identity.provider.AttributeProvider的引用,该引用绑定到ProviderLookupContext标识的存储库中包含的实体范围。
- AttributeProvider实现是基础身份存储库的网关 ,并通过javax.security.identity.provider.RepositoryLookupService和javax.security.identity.provider.RepositoryUpdateService公开类似于CRUD的功能。
代码段
参考实施
与大多数Java标准一样,JSR 351具有称为Nobis的参考实现。 它提供以下实现:
- javax.security.identity.client.LookupService,即ProviderLookupService和AttributeLookupService –启用来自存储库的搜索/查找身份属性
- javax.security.identity.provider.AttributeProvider
- javax.security.identity.provider.AttributeRepository
- javax.security.identity.client.IDPredicate –用作过滤/搜索条件
作为实施的一部分,Nobis RI还提供:
- 发布与@ javax.security.identity.annotations.IDEntityProvider和@ javax.security.identity.annotations.IDEntity对应的构造拦截器 ,它们不过是拦截器绑定。
- 类似于上述拦截器的API之类的工厂
- Facebook作为属性提供程序以及基于JPA和内存中提供程序的示例实现。
一些值得期待的事情
- API将如何发展并达到最终的形状
- 社区将如何采用它
- 产品和实际应用程序将如何实施和利用它
干杯。 。 。 。 ! ! !
翻译自: https://www.javacodegeeks.com/2014/06/a-closer-look-at-the-java-identity-api.html