下图说明了 Message Queue 代理如何使用 JAAS。它显示了上图所示的 JAAS 模型的更复杂实现。
与更简单的示例所显示的一样,验证服务层与代理是分开的。验证服务包含一个或多个登录模块 (LoginModule) 以及附加验证模块(如果需要)。登录模块在与代理相同的 Java 虚拟机中运行。对于登录模块来说,Message Queue 代理表示为 LogInContext,并通过 CallBackHandler(作为代理运行时代码的一部分)与登录模块进行通信。
验证服务还提供一个 JAAS 配置文件,其中包含登录模块的入口。该配置文件指定了这些模块的使用顺序以及一些使用条件。在代理启动时,JAAS 通过 Java 系统属性 java.security.auth.login.config 或 Java 安全属性文件来查找该配置文件。然后,它根据代理属性 imq.user_repository.jaas.name 的值在 JAAS 配置文件中选择一个入口。该入口指定将用于验证的登录模块。正如图中所示,代理可以使用多个登录模块。(图 1–3 显示了配置文件、登录模块和代理之间的关系。)
代理使用 JAAS 插件验证服务这一情况对 Message Queue 客户端来说仍是完全透明的。客户端继续像以前一样连接到代理,以便传递用户名和密码。反过来,代理使用回调处理程序将此信息传递给验证服务,该服务使用此信息验证用户并返回结果。如果验证成功,代理将允许建立连接;如果失败,客户端运行时环境将返回 JMS 安全异常,客户端必须对其进行处理。
验证 Message Queue 客户端后,如果要进行进一步授权,代理将按正常方式继续操作;它将查看访问控制文件,以确定是否授权经过验证的客户端执行它要完成的操作:访问目的地、使用消息和浏览队列等。