jakarta-ee - JAAS LoginModule 在 Websphere Liberty 中不起作用

标签 jakarta-ee websphere jaas websphere-liberty

我需要在 Liberty 中实现 JAAS LoginModule。

我已经能够实现和配置(执行 login() 和 commit() 方法并返回 true)自定义模块,但它仍然不起作用(我仍然被重定向到登录页面,就好像容器一样并不真正认为用户已通过身份验证)。

基于我在 IBM documentation 上读到的内容我很确定我需要在“login() 方法”中做一些事情,我只是不知道什么。 我见过一些将事物添加到主题或“sharedState”映射中的示例,但我似乎无法准确地弄清楚我的代码需要什么。

因此,我们将不胜感激一些有关如何将用户/组/角色传递回容器的代码示例。


我已经取得了一些进展,现在身份验证可以工作,但授权不行。

我已将此代码添加到 login() 方法中:

    java.util.Hashtable<String, Object> customProperties = 
            (java.util.Hashtable<String, Object>) sharedState.
            get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    if (customProperties == null) {
        customProperties = new java.util.Hashtable<String, Object>();
    }

    customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, username);
    customProperties.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username);
    ((Map<String, Object>)sharedState).put(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY,
            customProperties);

此后一切正常,但前提是我在 server.xml 中使用以下内容:

 <application-bnd>
    <security-role name="adminrole">
      <special-subject type="ALL_AUTHENTICATED_USERS" />
    </security-role>
  </application-bnd>

因此,所有经过身份验证的用户都具有访问我的应用程序所需的角色。

但是,如果我尝试用用户或组替换特殊主题,则会收到错误消息:

CWWKS9104A: Authorization failed for user userXXX:defaultRealm while invoking CustomLoginTest on /. The user is not granted access to any of the required roles: [adminrole].

因此,login() 方法必须返回其他内容(也许我还需要在主题中设置一些内容)。 将用户组列表添加到sharedState映射也不起作用:

customProperties.put(AttributeNameConstants.WSCREDENTIAL_GROUPS, groups);

最佳答案

需要其他默认登录模块来创建用于身份验证的 WebSphere 凭证。查看此文档以了解如何配置 JAAS 自定义登录模块。 https://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_sec_jaas.html?cp=SSEQTP_8.5.5&lang=en 您的自定义 JAAS 登录模块可以使用共享状态或主题中的 HashMap 将用户信息传递到其他默认登录模块。

关于jakarta-ee - JAAS LoginModule 在 Websphere Liberty 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35334879/

相关文章:

transactions - 是否使用 JTA 事务?

java - 使用 Websphere 在 Java 中读取环境变量

使用 Active Directory 用户主体名称的 Java Kerberos 身份验证

java - 使用 JMX 和 Jaas 进行 jconsole 身份验证

java - 从 Eclipse 启动 Glassfish Server 时出错

java - 在 JBOSS 7 中部署 JASIG CAS 时类路径错误

java - JAX-RPC 处理程序发生异常

java - 重新安装应用程序时内存消耗增加

java - Spring Boot with websphere 8.5.5 - UOWManager 事务处理失败

javax.security.auth.login.LoginException : No LoginModules configured for SomeLogin