在深入探讨之前,让我们看一下有关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对象(例如X509CertificateKerberosTicket)为封装身份属性提供了相似的外观,但仅限于有限的范围。 代替具有完全不同且非标准的模型,需要制定一套标准,应用程序或身份框架开发人员可以利用这些标准为网络身份的传播和使用提供坚如磐石的支持。

一个简单的类比

我喜欢将其视为类似于JDBCJNDI (如果不相同)的API。 这两个API都可以帮助开发人员通过标准接口以松散耦合的方式与基础数据源或命名服务进行通信。 它使我们能够采用可插拔的体系结构,其中可以利用不同的供应商实现方式来连接不同的数据库(Oracle,MySQL,Sybase DB2 ...我们真的不在乎,除了在我们的类路径中使用供应商JARS),LDAP服务器( AD,OID,Sun Java,Apache等)。

Java Identity API如何提供帮助?

该API将:

  • 允许应用程序以可移植和标准的方式与异构基础身份存储库进行交互。
  • 允许供应商使用属性服务框架开发实现,以与一个或多个存储库(如FacebookTwitter ,通过受支持的协议/ API(如OAUTHOpen IDFaceBook 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.RepositoryDe​​scriptor

API使用概述

应用程序需要访问基础存储库才能与其进行交互并执行操作。 下面的示例概述了步骤的顺序,突出了应用程序可以利用API来获取基础标识和属性的句柄的方式:

  1. javax.security.identity.client.LookupService接口的具体实现。 这封装了javax.security.identity.client.ProviderLookupServicejavax.security.identity.provider.AttributeLookupService的服务
  2. 通过将LookupService与javax.security.identity.provider.RepositoryAgent的实现绑定,可以获取javax.security.identity.client.ProviderLookupContext的实例。
  3. ProviderLookupContext用于获取对javax.security.identity.provider.AttributeProvider的引用,该引用绑定到ProviderLookupContext标识的存储库中包含的实体范围。
  4. AttributeProvider实现是基础身份存储库网关 ,并通过javax.security.identity.provider.RepositoryLookupServicejavax.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

仔细研究Java Identity API相关推荐

  1. java identity_仔细研究Java Identity API

    java identity 在深入探讨之前,让我们看一下有关Java Identity API JSR 351的一些快速事实. 这仍在进行中. . . JSR是什么时候发起的? 该JSR在2011年1 ...

  2. java反射api研究_深入研究Java 8中的可选类API

    java反射api研究 作为Java程序员,我们所有人都经历了以下情况:我们调用一个方法来获取某个值,然后代替直接对返回值调用某些方法,我们首先必须检查返回值是否不为null,然后在返回值. 这是像G ...

  3. 关于 Java Collections API 您不知道的 5 件事--转

    第 1 部分 http://www.ibm.com/developerworks/cn/java/j-5things2.html 对于很多 Java 开发人员来说,Java Collections A ...

  4. java const string_深入研究Java String

    开始写 Java 一年来,一直都是遇到什么问题再去解决,还没有主动的深入的去学习过 Java 语言的特性和深入阅读 JDK 的源码.既然决定今后靠 Java 吃饭,还是得花些心思在上面,放弃一些打游戏 ...

  5. 【转】深入研究java.lang.Class类

    深入研究java.lang.Class类            Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类 ...

  6. Java Persistence API中的FetchType LAZY和EAGER之间的区别?

    我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...

  7. 深入研究Java类加载机制

    深入研究Java类加载机制   类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载 ...

  8. oidc_使用Java EE和OIDC构建Java REST API

    oidc "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. ...

  9. 使用Java EE和OIDC构建Java REST API

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Java ...

最新文章

  1. 92号油的发动机能加97吗?标号越高不代表就越好
  2. 10 号发工资和 20 号发工资的公司,区别竟然这么大?
  3. Buuctf(pwn) picoctf_2018_rop chain 栈溢出
  4. JVM-Java程序性能监控-初级篇
  5. linux内核字符串逆序,Linux内核中常用字符串函数实现
  6. java基本数据类型所占长度_java基本数据类型长度详解
  7. Mapreduce中maptask过程详解
  8. python:单例模式--使用__new__(cls)实现
  9. 逐行读取txt文件中_Spring系列八:Spring 中读取文件-ResourceLoaderAware
  10. Qt5学习笔记之bin文件合成工具二:bin文件的读取和写入
  11. 防止浏览器记住用户名及密码的简单实用方法
  12. android中简单视频播放器demo(附githup下载源码)
  13. SPSS因子分析案例
  14. 智慧监狱人员定位系统,监狱防拆手环功能介绍
  15. 前端开发对JSESSIONID的初步了解:JSESSIONID的产生以及简单说明
  16. linux是基于什么的开源操作系统,什么是开源操作系统
  17. 数据库—Mysql相关
  18. maximo跟java_Maximo7.5远程调用maximo的手动输入节点工作流
  19. iOS iOS 地图与定位开发系列教程
  20. Axure 设计App界面

热门文章

  1. 2019蓝桥杯省赛---java---A---8(修改数组)
  2. Java中数组的赋值方式
  3. java 继承 实现 会重写 方法吗_java 中继承,组合,重载,重写的实现原理 (转)...
  4. python遗传算法工具箱的使用_遗传算法的python实现,非常值得看的一篇文章
  5. kafka命令行操作
  6. apache.camel_Apache Camel 3.2 – Camel的无反射配置
  7. jep290涉及jdk版本_针对JDK 14提议的另外六个JEP
  8. jpa避免n+1_JPA技巧:避免N + 1选择问题
  9. payara 创建 集群_Payara Micro在Oracle应用容器云上
  10. java8根据某个id删选_Java 8可选