定制应用程序登录以使用 JAAS 来执行身份断言

可以使用 Java™ 认证和授权服务 (JAAS) 登录框架来创建 JAAS 登录配置,可以使用此 JAAS 登录配置来登录 Liberty 上的身份断言。

关于此任务

通过使用信任验证来配置身份断言,应用程序可以使用 JAAS 登录配置来执行程序化身份断言。有关更多详细信息,请参阅 IdentityAssertionLoginModule

过程

  1. 将信任验证委托给用户实现的插入点。
    由定制登录模块完成信任验证。此定制登录模块执行任何所需的信任验证,然后设置共享状态下要传递到身份断言登录模块的信任和身份信息。下列共享状态键中需要映射:
    com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.state
    如果缺少状态,那么 IdentityAssertionLoginModule 类会报告 WSLoginFailedException 问题。
    共享状态键中的映射必须包含具有下列键名称的信任密钥:
    com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.trust
    如果此键设为 true,那么建立信任。如果此键设置为 false,那么不会建立任何信任,并且 IdentityAssertionLoginModule 类会创建 WSLoginFailedException 问题。

    共享状态键中的映射也必须设置下列其中一个资源:

    • 身份键。可以在下列键中设置 java.security.Principal
      com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.principal
    • java.security.cert.X509Certificate[]。可以在下列键中设置此证书:
       com.ibm.wsspi.security.common.auth.module.IdentityAssertionLoginModule.certficates
    如果同时提供主体和证书,那么会使用主体,并报告警告。
  2. 为应用程序登录创建 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 配置来执行身份断言。
  3. 执行可编程身份断言。 现在,程序可以使用 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 登录配置。

用于指示主题类型的图标 任务主题

文件名:twlp_dev_custom_idassertion.html