JavaEE(JBossEAP)自定义身份验证方法JWT

JavaEE(JBossEAP)自定义身份验证方法JWT,java,jboss,Java,Jboss,我希望实现JWT身份验证,并从JavaEE上的令牌中获取一些额外信息 问题是,我需要在我的web.xml文件中使用一个自定义的auth方法“jwt”,但除了BASIC、DIGEST、FORM、CLIENT-CERT之外,这是不受支持的 有没有办法实现自定义登录方法来启动身份验证过程 我不需要客户端交互,授权头将使用承载域从调用应用程序填充 Ie授权:持证人cn389ncoiwuencr注:这是在6.4 EAP上测试的,可能需要对v7进行更改,尤其是使用阀门 您需要编写一个自定义的xx.身份验证机

我希望实现JWT身份验证,并从JavaEE上的令牌中获取一些额外信息

问题是,我需要在我的
web.xml
文件中使用一个自定义的auth方法“jwt”,但除了BASIC、DIGEST、FORM、CLIENT-CERT之外,这是不受支持的

有没有办法实现自定义登录方法来启动身份验证过程

我不需要客户端交互,授权头将使用承载域从调用应用程序填充


Ie授权:持证人cn389ncoiwuencr

注:这是在6.4 EAP上测试的,可能需要对v7进行更改,尤其是使用阀门

您需要编写一个自定义的xx.身份验证机制。您可以通过扩展
org.apache.catalina.authenticator.FormAuthenticator
并重写authenticate方法来实现这一点

身份验证方法将执行以下操作:

Principal principal = request.getUserPrincipal();
if (principal != null) {
 logger.trace("User already authenticated");
 return true;
}

Realm realm = context.getRealm();

principal = realm.authenticate("user", (String) null);

register(request, response, principal, "Bearer", "user", null);

return true;
然后,可以在安全子系统下的独立xml中配置域

<security-domain name="JWT">
    <authentication>
        <login-module code="xx.xx.xx.JWTLoginModule" flag="required">
        </login-module>
    </authentication>
</security-domain>

图书馆。有关登录模块的信息,请访问。创建自己的extend org.jboss.security.auth.spi.AbstractServerLoginModule

然后,您需要将这些扩展添加到eap服务器的modules目录中,其模块依赖项与org.picketbox module相同

这就完成了服务器设置。现在,您需要指示应用程序使用此设置:

在WEB-INF目录中创建: jboss-web.xml作为

<jboss-web>
    <security-domain>JWT</security-domain>
    <valve>
        <class-name>xx.Authentication</class-name>
    </valve>
</jboss-web>

JWT
xx.认证
以及加载在自定义模块中的jboss部署结构

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="xx.custom"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

最后,在web.xml文件中,将auth方法更改为“JWT”


打算创建此版本的开源版本,但在此之前必须这样做。

同样的问题。没有大量的文档涉及到这一点@MatthewCachia我现在已经编写了自己的模块来实现这一点。我可以分享如何做到这一点的细节。打算开放源代码,但还没有。@MatthewCachia请看下面的答案。嗨@IanWatson-我会检查一下,然后更新回来。谢谢这是非常有用的;你曾经为此制作过一个模块吗?