我之前在 Glassfish 上有过一些代码,但我想将它移植到 WildFly。
但是,我似乎无法让 WildFly 调用该模块。初始化ServletContextListener
模块如下
AuthConfigFactory.getFactory() .registerConfigProvider(new OpenIdConnectModuleConfigProvider(options, null), "HttpServlet", getAppContext(sce), null);
"HttpServlet"
不是 Glassfish 特定的,似乎在https://github.com/wildfly/wildfly/blob/master/undertow/src/main/java/org/wildfly/extension/undertow/security/jaspi/JASPIAuthenticationMechanism.java 中被引用?来源=cc
Glassfish 不需要<logon-config>
阻止web.xml
并且在 WildFly 中放置任何变体都不起作用(如预期的那样)
我怀疑的另一个地方是我如何计算应用程序上下文标识符。对于 Glassfish 我有
private String getAppContext(final ServletContextEvent sce) {
return sce.getServletContext()
.getVirtualServerName() + " "
+ sce.getServletContext()
.getContextPath();
}
WildFly 会有所不同吗?虽然我在https://github.com/rdebusscher/secSpikeWeb/blob/master/src/main/java/org/omnifaces/security/jaspic/core/Jaspic.java#L300中也看到了类似的代码
我也试过添加到standalone.xml
这个块
<security-domain name="jaspi" cache-type="default">
<authentication-jaspi>
<login-module-stack name="dummy">
<login-module code="Dummy" flag="optional"/>
</login-module-stack>
<auth-module code="org.wildfly.extension.undertow.security.jaspi.modules.HTTPSchemeServerAuthModule" flag="required"/>
</authentication-jaspi>
</security-domain>
并设置<default-security-domain value="jaspi"/>
但是它没有任何效果,并且在模块中放置断点也没有表明它被命中。
此外,在WildFly中,我找不到一种方法来执行以下操作,glassfish-web.xml
但这可能是另一个问题
<security-role-mapping>
<role-name>users</role-name>
<group-name>https://helloworld</group-name>
</security-role-mapping>
代码相当大,但它的要点可以在
https://github.com/trajano/openid-connect/tree/openid-connect-1.0.1/openid-connect-jaspic-module
和
https://github.com/trajano/openid-connect/tree/openid-connect-1.0.1/openid-connect-jaspic-sample
注意我在应用程序级别寻找它,而不是设置全局服务器 JASPI。