我使用PasswordGuessEvidence以及示例中提到的其他回调实现了类似于https://github.com/wildfly-security-incubator/elytron-examples/tree/master/simple-http-mechanism中的CustomHeaderHttpAuthenticationMechanism的身份验证机制。自定义机制的原因是,除了简单的凭据检查之外,我们还需要验证更多约束以检查用户是否经过验证。
单步执行此身份验证机制看起来非常好,调用了authenticationComplete方法,并且authorizeCallback也成功了。但是,当通过resteasy端点访问EJB(EJB使用@SecurityDomain和@RolesAllowed ...注释)时,SimpleSecurityManager.authorize方法失败,因为securityContext.getUtil方法既不提供主体也不提供其他方法。如果访问@PermitAll注释的方法,则成功。
我猜在处理不同的回调时,应该由ServerAuthenticationContext创建主体,对吗?
如何管理SimpleSecurityManager可以识别主体,我需要在我的身份验证机制中创建它,以及如何?
答案 0 :(得分:0)
在这种情况下,听起来您的EJB部署尚未映射到WildFly Elytron安全域,因此仍在EJB层中使用PicketBox安全性,这就是为什么看不到已经建立的身份。
在EJB子系统中,您还可以添加一个应用程序安全域映射,以从部署中指定的安全域映射到WildFly Elytron安全域。
仅供参考,在将来某个时刻,当我们准备从服务器中删除PicketBox时,将不再需要这些附加的映射,但是不幸的是,当我们同时具有这两种解决方案时,它们只是必需的。