可以使用 Java™ 认证和授权服务 (JAAS) 登录框架来创建 JAAS 登录配置,可以使用此 JAAS 登录配置来登录 Liberty 上的身份断言。
关于此任务
通过使用信任验证来配置身份断言,应用程序可以使用 JAAS 登录配置来执行程序化身份断言。有关更多详细信息,请参阅 IdentityAssertionLoginModule。
过程
- 将信任验证委托给用户实现的插入点。
由定制登录模块完成信任验证。此定制登录模块执行任何所需的信任验证,然后设置共享状态下要传递到身份断言登录模块的信任和身份信息。下列共享状态键中需要映射:
com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.state
如果缺少状态,那么
IdentityAssertionLoginModule 类会报告
WSLoginFailedException 问题。
共享状态键中的映射必须包含具有下列键名称的信任密钥:
com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.trust
如果此键设为
true,那么建立信任。如果此键设置为
false,那么不会建立任何信任,并且
IdentityAssertionLoginModule 类会创建
WSLoginFailedException 问题。
共享状态键中的映射也必须设置下列其中一个资源:
如果同时提供主体和证书,那么会使用主体,并报告警告。
- 为应用程序登录创建 JAAS 配置。 JAAS 配置将包含用户实现的信任验证定制登录模块和 IdentityAssertionLoginModule 类。然后,要设置应用程序登录配置,请在 server.xml 文件中配置下列代码:
<jaasLoginContextEntry id="CustomIdentityAssertion" name="CustomIdentityAssertion"
loginModuleRef="customIdentityAssertion,identityAssertion" />
<jaasLoginModule id="customIdentityAssertion"
className="com.ibm.ws.security.authentication.IdentityAssertionLoginModule"
controlFlag="REQUIRED" libraryRef="customLoginLib"/>
<library id="customLoginLib">
<fileset dir="${server.config.dir}" includes="IdentityAssertionLoginModule.jar"/>
</library>
应用程序将使用此 JAAS 配置来执行身份断言。
- 执行可编程身份断言。 现在,程序可以使用 JAAS 登录配置来执行程序化身份断言。应用程序可为步骤 2 中所创建的 JAAS 配置创建登录上下文,然后使用将断言的身份来登录该登录上下文。如果登录成功,就会在当前运行进程中设置该身份。以下示例说明了此过程:
NameCallback handler = new NameCallback(new MyPrincipal("Joe"));
LoginContext lc = new LoginContext("customIdentityAssertion", handler);
lc.login(); //assume successful
Subject s = lc.getSubject();
WSSubject.setRunAsSubject(s);
// From here on , the runas identity is "Joe"
注: MyPrincipal 类是示例中 java.security.Principal 接口的实现。
结果
通过使用 JAAS 登录框架和两个用户实现的登录模块,可以创建可用来登录身份断言的 JAAS 登录配置。