码迷,mamicode.com
首页 > 编程语言 > 详细

【Java安全技术探索之路系列:Java可扩展安全架构】之十六:JAAS(三):JAAS编程模型

时间:2015-06-16 17:06:43      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:jaas   编程   架构   

作者:郭嘉
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell

一 JAAS认证

在JARS认证过程中,客户端应用通过实例化LoginContext对象启动认证。然后,LoginContext与LoginModule通信,并由LoginModule执行实际的认证过程。由于LoginContex使用的LoginModule提供的通用接口,因此在运行时比较容易改变认证提供者,且无须对LoginGontext做任何修改。典型的Logi}ule将提示输人用户名/密码并对其进行验证,或者同其他认证提供者(如RSA SecurelD、智能卡、生物特征)交互。LoginModule使用CallbackHandler与客户端通信以执行用户交互,从而获得认证信息并通告登录进度和认证事件。

1.1 实现JAAS登录模块

实现JAAS登录模块的步骤如下所示:

  1. 定义一个代表登录模块的类,实现接口LoginModule。
  2. 实现接口LoginModule的方法。

1.2 配置JAAS登录模块的提供者

JAAS登录模块在属性文件JAVA_HOME/jre/lib/security/java.security中配置。要在J2SE环境中配置JARS登录模块,

为应用配里JAAS登录模块

可以使用JARS配置文件(如my-jaas.conf )为应用配置JAAS登录模块。JARS配置文件指定一个或多个用于认证的JAAS登录模块。该配置文件中的每一项都用应用名称标识,并包含为该应用配置的登录模块列表。每个登录模块都是由其全限定类名和一个认证标志值指定的,认证标志值可以控制整个认证行为。认证过程将按配置文件中指定的条目列表依次执行。下面是认证标志值的可能取值:

  • Required(必需的):必须通过相关的登录模块认证,但无论成功还是失败,认证都将继续处理后续的登录模块。
  • Requisite必要的):表示仅当相关的登录模块成功,整个认证才视为是成功的。如果成功,认证将继续处理后续的登录模块;如果失败,将结束认证并返回应用。
  • Sufficient(足够的):表示只要相关的登录模块认证成功,则整个认证就是成功的。如果相关的认证成功,就返回应用,不再继续处理后续的登录模块;如果认证失败,则继续处理后续的登录模块。
  • Optional(可选的):相关的登录模块认证并非必需要成功。不论相关认证成功与否,都将继续处理后续的登录模块。

如果没有指定标志值Sufficient,则只有当所有Required和Requisite登录模块都成功了,整个认证才视为是成功的。如果没有指定任何Required或Requisite登录模块,则必须至少有一个Sufficient或Optional登录模块是成功的。除上述标志外,还可以使用名称一值对来指定模块特定的选项,这些选项可直接传递给底层登录模块。

1.3 在客户端实现JAAS认证

在客户端实现JAAS认证的步骤如下所示:

  1. 客户端应用实例化一个LoginContext对象。
  2. LoginContext对象加载JARS配置文件中指定的登录模块。
  3. 客户端应用调用LoginContext对象的login()方法。该方法调用加载的登录模块,并尝试对Subject
    进行认证。如果成功,则登录模块会将客户端凭证(如用户名/密码或令牌)同Subject关联起来。
  4. 最后,LoginContext将认证状态返回给应用。如果认证成功,则应用将从LoginContext中检索已通过认证的Subject。

二 JAAS授权

JARS授权通过添加基于用户、组和角色的访问控制机制,从而增强了Java安全模型。它允许设置用
户级和操作级权限,以便对代码执行者实施访问控制。认证过程中创建的Subject对象代表一个已通过认证的实体。Subject对象通常包含一组Principal,其中每个Principal都代表一个应用的调用者。权限是使用策略授给Principal的。当登录的用户通过认证后,应用便根据用户的访问控制上下文将Principal和Subject对象关联起来。

2.1 实现JAAS授权

实现JAAS授权步骤如下所示:

  1. 调用者必须有一个已通过认证的Subject对象。
  2. 必须有一个使用Principal和权限配置的策略文件。
  3. 调用者的Subject对象必须同当前的访问控制对象关联起来。

2.2 使用JAAS共享状态的单点登录

JAAS共享状态支持在多个认证模块之间共享安全凭证(如用户名/密码、共享秘密密钥等)。这允许在多个应用使用的登录模块之间共享安全凭证,从而实现到多个应用的SSDo JAAS提供一种共享状态机制,使登录模块能够将认证凭证放入共享映射(shared map)中,然后将其传递给配置文件中定义的其他登录模块。在典型的SS(〕场景中,多个应用必须使用统一的认证解决方案,使用户只需登录一次就可以访问多个应用。要在JARS中实现SSO,则必须在JARS配置文件中定义所有参与SSC)的应用使用的登录模块。登录模块可以使用配置文件中指定的sharedState参数,该参数可以确保任何登录模块的认证结果都能与其他登录模块共享。例如,当登录模块配置了sharedState时,将允许多个登录模块共享用户名和密码,从而确保用户只需输人一次密码就能通过多个登录模块的认证。

【Java安全技术探索之路系列:Java可扩展安全架构】之十六:JAAS(三):JAAS编程模型

标签:jaas   编程   架构   

原文地址:http://blog.csdn.net/allenwells/article/details/46517897

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!