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

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

【Java安全技术探索之路系列:Java可扩展安全架构】章节目录

【Java安全技术探索之路系列:Java可扩展安全架构】之一:Java可扩展安全架构开篇
【Java安全技术探索之路系列:Java可扩展安全架构】之二:JCA(一):JCA架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之三:JCA(二):JCA类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之四:JCA(三):JCA编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之六:JCE(二):JCE类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之七:JCE(三):JCE编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之八:JCP(一):JCP架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之九:JCP(二):JCP类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之十:JCP(三):JCP编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之十一:JSSE(一):JSSE架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之十二:JSSE(二):JSSE类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之十三:JSSE(三):JSSE编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之十四:JAAS(一):JAAS架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之十五:JAAS(二):JAAS类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之十六:JAAS(三):JAAS编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之十七:JGSS(一):JGSS架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之十八:JGSS(二):JGSS类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之十九:JGSS(三):JGSS编程模型
【Java安全技术探索之路系列:Java可扩展安全架构】之二十:SASL(一):SASL架构介绍
【Java安全技术探索之路系列:Java可扩展安全架构】之二十一:SASL(二):SASL类和接口
【Java安全技术探索之路系列:Java可扩展安全架构】之二十二:SASL(三):SASL编程模型

一 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时,将允许多个登录模块共享用户名和密码,从而确保用户只需输人一次密码就能通过多个登录模块的认证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java代码中配置`sasl.jaas.config`需要使用`java.util.Properties`对象来设置SASL的JAAS配置。下面是一个示例代码: ```java import java.util.Properties; public class KafkaProducerConfig { private final String BOOTSTRAP_SERVERS = "localhost:9092"; private final String CLIENT_ID = "kafka-producer"; private final String KEY_SERIALIZER = "org.apache.kafka.common.serialization.StringSerializer"; private final String VALUE_SERIALIZER = "org.apache.kafka.common.serialization.StringSerializer"; private final String SASL_JAAS_CONFIG = "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"username\" password=\"password\";"; public Properties getConfig() { Properties props = new Properties(); props.put("bootstrap.servers", BOOTSTRAP_SERVERS); props.put("client.id", CLIENT_ID); props.put("key.serializer", KEY_SERIALIZER); props.put("value.serializer", VALUE_SERIALIZER); props.put("sasl.jaas.config", SASL_JAAS_CONFIG); props.put("security.protocol", "SASL_PLAINTEXT"); props.put("sasl.mechanism", "PLAIN"); return props; } } ``` 在上面的代码中,我们创建了一个`Properties`对象,并设置了`bootstrap.servers`,`client.id`,`key.serializer`和`value.serializer`等Kafka生产者的配置参数。然后,我们设置`sasl.jaas.config`为SASL的JAAS配置,这里使用的是PLAIN文本认证模式,用户名为`username`,密码为`password`。最后,我们还设置了`security.protocol`和`sasl.mechanism`,以指定使用的SASL协议和认证机制。 你可以根据自己的需要修改相应的配置参数和认证方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值