设置符合 JAAS 的验证的过程包括设置一些代理和系统属性,以便选择这种验证类型、指定配置文件位置以及指定要使用的登录模块入口。
本部分说明了 JAAS 客户端、登录模块和 JAAS 配置文件是如何相互关联的,然后介绍了设置符合 JAAS 的验证所需的过程。下图显示了配置文件、登录模块和代理之间的关系。
正如图中所示,JAAS 配置文件 MyJAASCFile.config 包含对几个登录模块(组合在一个入口点中)的引用。代理通过查看 Java 系统属性 java.security.auth.login.config 或 Java 安全属性文件来查找配置文件。要使用的登录模块是通过查看代理属性 imq.user_repository.jaas.name 确定的,该属性指定配置文件中的所需入口。可以在 lib/ext 目录中找到这些模块的类。
要为 Message Queue 设置 JAAS 支持,您必须完成以下步骤。(在开发环境中,可以由开发者完成所有这些步骤。在生产环境中,将由管理员完成其中的某些任务。)
创建一个或多个用于实现验证服务的登录模块类。下面列出了代理支持的 JAAS 回调类型。
代理使用此回调为验证服务传递代理运行的语言环境。可以使用该值来进行本地化。
代理使用此回调为验证服务传递 Message Queue 客户端在请求连接时指定的用户名。
当 TextInputCallback.getPrompt() 为 imq.authentication.type 时,代理使用此回调为验证服务指定 imq.authentication.type 的值。目前,此字段的值只能为 basic。这表示使用 Base-64 密码编码。
代理使用此回调为验证服务传递 Message Queue 客户端在请求连接时指定的密码。
通过将文本输出记录到代理日志文件中,代理使用此回调为验证服务提供日志记录服务。回调的消息类型 ERROR、INFORMATION、WARNING 分别映射到代理日志级别 ERROR、INFO 和 WARNING。
使用引用登录模块类的入口创建 JAAS 配置文件,并为 Message Queue 管理员指定此文件的位置。(可以远程查找该文件,并且可以使用 url 指定其位置。)
记下 JAAS 配置文件中的入口(它引用登录实现类)的名称。
将用于实现登录模块的类归档为 jar 文件,然后将 jar 文件放在 Message Queue 的 lib/ext 目录中。
配置与 JAAS 支持相关的代理属性。表 1–2 对此进行了描述。
设置以下系统属性以指定 JAAS 配置文件的位置。
java.security.auth.login.config= JAAS_Config_File_Location
例如,可以在启动代理时指定配置文件。
imqbrokerd -Djava.security.auth.login.config=JAAS_Config_File_Location
可以使用其他方法来指定 JAAS 配置文件的位置。有关其他信息,请参见
http://java.sun.com/j2se/1.5.0/docs/guide/security/jaas/tutorials/LoginConfigFile.html
下表列出了设置 JAAS 支持所需的代理属性。
表 1–2 用于 JAAS 支持的代理属性
属性 |
描述 |
---|---|
imq.authentication.type |
设置为 basic 以表示使用 Base-64 密码编码。这是 JAAS 验证唯一允许的值。 |
imq.authentication.basic.user_repository |
设置为 jaas 以指定 JAAS 验证。 |
imq.accesscontrol.type |
设置为 file。 |
imq.user_repository.jaas.name |
设置为 JAAS 配置文件中的所需入口的名称,该入口引用要用作验证机制的登录模块。这是在步骤 3 中记下的名称。 |
imq.user_repository.jaas.userPrincipalClass |
此属性(由 Message Queue 访问控制使用)指定登录模块中的 java.security.Principal 实现类,代理使用该类来提取主体名称,以表示 Message Queue 访问控制文件中的用户实体。如果未指定此属性,则改用在请求连接时从 Message Queue 客户端传递的用户名。 |
imq.user_repository.jaas.groupPrincipalClass |
此属性(由 Message Queue 访问控制使用)指定登录模块中的 java.security.Principal 实现类,代理使用该类来提取主体名称,以表示 Message Queue 访问控制文件中的组实体。如果未指定此属性,则忽略 Message Queue 访问控制文件中的组规则(如果有)。 |