当前位置: 首页 > 知识库问答 >
问题:

使用Wildfly的JAAS自定义登录模块

张逸清
2023-03-14

我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。

这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚至开始了他的git项目。

因为我只使用令牌,所以不能使用请求。登录(用户名、密码)启动wildfly登录过程。所以我尝试了这个:

@Inject
private SampleEJB sampleEJB;

...

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String token = request.getParameter("token");
    try{
        context = new LoginContext("TokenLoginDomain", new TokenCallbackHandler(token));
        context.login();
    }catch(Exception e){
        e.printStackTrace();
    }

    response.getWriter().println("username=" + exampleEJB.getPrincipalName());
}

我的EJB看起来像这样:

@Stateless
public class SampleEJB {
    @Resource
    private EJBContext ejbContext;

    @RolesAllowed("partner")
    public String getPrincipalName() {
        return ejbContext.getCallerPrincipal().getName();
    }
}

在servlet中没有凭据的情况下,如何启动登录过程,以便用户以wildfly用户的身份登录?

共有1个答案

鲜于星波
2023-03-14

在JavaEE中不能以这种方式进行身份验证。使用给定的代码,只能在LoginContext实例中对您进行身份验证。

正如您已经发现的请求。登录(用户名、密码)触发身份验证过程,但仅限于用户名/密码凭据。

在这种情况下,您不仅应该编写自定义LoginMoules(标识存储),还应该编写自定义身份验证机制。身份验证机制是身份验证过程中的控制器,而身份存储是模型。

可以通过WildFly很好地支持的JASPIC SPI添加自定义身份验证机制。

您可以使用一些实用程序代码从应用程序注册一个ServerAuthModule(SAM),您可以从这里复制这些代码:https://github.com/arjantijms/glassfish-sam-ee-namespaces/tree/master/src/main/java/javax/security/authenticationmechanism

然后实际用代码注册SAM,如下所示:

https://github.com/arjantijms/glassfish-sam-ee-namespaces/blob/master/src/main/java/test/SamAutoRegistrationListener.java

 类似资料:
  • 有人可以使用jaas登录模块吗。我在看医生 我想是这些登录模块可以1.与OS用户进行身份验证2.提供该用户的组。 基本上我想通过操作系统进行身份验证。输入用户名和密码 我想用windows进行身份验证 我不想做LDAP认证只做os认证。 对于windows,有华夫饼干库可用。但我无法在使用64位机器时进行身份验证。在32位上运行良好。 对于linux,有jpam,但它不提供组。它只会检查用户名、密

  • 我是WebSphere Liberty概要文件的新手。我正在编写17.0.0.4版本。我试图实现的是为应用程序设置自定义JAAS登录设置。该应用程序在WebSphere8.5上运行良好。 我已经查看了IBM知识中心的许多链接,但得到了JAAS自定义登录的结果,但不是两者一起。在WebSphere 8.5中,我们有层次结构来决定哪个身份验证机制去哪里,但是在Liberty中,如果我设置自定义JAAS

  • 在为EJB远程认证激活自定义登录模块时,还会调用applicationrealm进行身份验证。不幸的是,我不知道为什么。 EJB远程客户端属性: ejb URL: 基于普通standalone.xml的standalone.xml配置(不完整): 服务接口 自定义登录模块

  • 我在服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。此自定义登录模块需要三个CallbackHandler:NameCallback(Java Standard)、PasswordCallback(Java Stanstandard)和一个额外的OtpCallaback(由我自己实现,用于一次性密码)。 我现在想通过JSF2.1 web应用程

  • 我创建了一个包含两种登录机制的项目: > < li> 第一个是使用简单登录页面的第一个认证机制(使用函数< code>findUser从数据库中获取用户(如果存在)) 第二种认证机制是JAAS提供的登录机制(j_security_check) 基本上,我试图实现这个目标:当用户成功进行身份验证(在第一个登录页面中)时,他应该能够跳过第二页登录(由JAAS提供),而不必在登录表单中重新输入他的用户名

  • 我需要在wildfly 10上运行一个自定义登录(我真的需要一个自定义实现)模块和客户端证书验证,但该模块本身从未执行。同样的方法也适用于jboss 6。 我的自定义模块: 网状物xml jboss网站。xml 在standalone.xml,包括ssl证书配置: 此外,我的自定义安全域是独立的。xml 甚至更改了默认的安全域 最后,https侦听器 一切似乎都可以,如上所示,但当我试图执行简单的