密钥斗篷,Wildfly和多租户安全

时间:2019-07-17 18:59:14

标签: java security java-ee wildfly keycloak

我正在Wildfly 17上部署Java EE 8 Web应用程序。我想使用Keycloak作为我的身份/身份验证提供程序。此外,我的应用程序被设计为多租户,其中Keycloak客户端配置基于HTTP标头动态加载。我已经下载了Keycloak-Wildfly适配器,并相应地修补了我的Wildfly配置。目前,我正在尝试通过保护Servlet并尝试通过浏览器访问它来证明我的配置正确。期望防止我访问servlet,将调用我的自定义KeycloakConfigResolver,加载Keycloak配置,最终将重定向到Keycloak进行身份验证。但实际上,这不是我所看到的。

我在web.xml文件中添加了以下内容,以表明我正在使用Keycloak进行登录支持...

<login-config>
    <auth-method>KEYCLOAK</auth-method>
    <realm-name>KEYCLOAK</realm-name>
</login-config>

<security-role>
    <role-name>*</role-name>
</security-role>

从那里,我创建了一个简单的Servlet,其中包含几个打印语句,以查看是否已通过身份验证。看起来像这样...

@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {

    /*
     *
     * (non-Javadoc)
     *
     * @see
     * javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
     * javax.servlet.http.HttpServletResponse)
     */
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Principal principal = request.getUserPrincipal();
        boolean admin = request.isUserInRole("admins");
        boolean user = request.isUserInRole("users");
        boolean moderator = request.isUserInRole("moderators");

        System.out.println("principal=" + principal);
    }
}

很显然,第一次点击将打印出principal=null。因此,我在上面添加了以下注释,希望这将阻止我访问servlet,并将开始将我重定向到Keycloak进行身份验证...

@RolesAllowed({ "users" })

但是,那什么也没做。我仍然看到principal=null正在打印。因此,我将其删除并开始使用此批注...

@ServletSecurity(value = @HttpConstraint(rolesAllowed = { "users" }), httpMethodConstraints = {
        @HttpMethodConstraint(value = "GET", rolesAllowed = { "users" }) })

不过,我看到principal=null正在打印。在应用程序级别或Servlet级别,我的配置中显然缺少了 something 。我只是不确定。有什么建议吗?

0 个答案:

没有答案