如何将 PicketBox 自定义登录模块迁移到 Elytron?

Posted

技术标签:

【中文标题】如何将 PicketBox 自定义登录模块迁移到 Elytron?【英文标题】:How to migrate PicketBox custom login module to Elytron? 【发布时间】:2021-10-02 07:14:25 【问题描述】:

我有一个部署在 Wildfly 上的应用程序,在独立版本中有这个条目:

<subsystem xmlns="urn:jboss:domain:security:2.0">
    <security-domains>
        <security-domain name="customLoginModule" cache-type="default">
            <authentication>
                <login-module code="com.mypackage.MyLoginModule flag="required"/>
            </authentication>
        </security-domain>
...

还有这个类:

public class MyLoginModule extends UsernamePasswordLoginModule 

    public static void authenticateUser(HttpServletRequest request, String principalName) 
        try 
            request.login(principalName, "PasswordKey");
         catch (ServletException ex) 
            throw new RuntimeException("...");
        
    

    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) 

        super.iniitalize(subject, callbackHandler, sharedState, options);
    

    private static Group[] createUserGroup() 

        SimpleGroup group = new SimpleGroup("Roles");

        group.addMember(new SimplePrincipal("MyUser"));

        return new Group[]group;
    

    @Override
    protected String getUsersPassword() 
        return "PasswordKey";
    

    @Override
    protected boolean validatePassword(String input, String expected) 
        return input.equals(expected);
    

    @Override
    protected Group[] getRoleSets() 
        return createUserGroup();
    

在我们的登录 servlet 中,调用了静态方法 authenticateUser()。

我不明白这门课的意义何在,以及安全性是如何工作的。需要删除提供 UsernamePasswordLoginModule 的 PicketBox 依赖项,因为它使用了这个已弃用的 Group 类。如何修改standalone.xml 中的上述逻辑和安全域以使用Elyton 安全性?我读了这个migration guide,但我无法理解它如何应用于我的案例。请帮忙,提前谢谢

【问题讨论】:

我不是专家,但也许这会有所帮助mastertheboss.com/jbossas/jboss-security/… 【参考方案1】:

该登录模块似乎将密码硬编码为 PasswordKey。

但是,如果您希望将其转换为 Elytron,自定义领域应该以与您的扩展 UserNamePasswordLoginModule 相同的方式扩展 org.wildfly.security.auth.server.SecurityRealm。请参阅MasterTheBoss,如上所述。

【讨论】:

以上是关于如何将 PicketBox 自定义登录模块迁移到 Elytron?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义用户模型迁移到 Django 中的不同应用程序?

如何更改Joomla的网址!登录模块到我们的自定义页面?

Worklight 6.1 和外部 dojolib,使用 AMD 加载自定义模块

JBOSS 自定义登录模块

从旧模块中删除依赖于自定义字段的 Django 迁移

如果匿名用户无权访问 URL,如何将他们重定向到自定义页面而不是登录页面?