Spring Security OIDC用户在IDP(Okta)完成身份验证后从不进行身份验证

hjzp0vay  于 2023-03-08  发布在  Spring
关注(0)|答案(1)|浏览(211)

我的Spring MVC应用程序遇到了一个奇怪的问题。这里我使用的是Spring Security 5.6.2和Spring 5.3.18版本。我将我的应用程序配置为使用Okta进行身份验证。在点击安全资源后,它会将我重定向到okta登录页面,在输入oauth用户凭据后,okta重定向回我的应用程序,但身份验证对象始终为空。
AbstractAuthenticationProcessingFilter.java的doFilter方法内部,要求身份验证(..)始终被评估为false

private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (!requiresAuthentication(request, response)) {
            chain.doFilter(request, response);
            return;
        }
}

我花了很多时间才找到根本原因并解决问题。

khbbv19g

khbbv19g1#

当我调试OAuth2 LoginAuthenticationFilter和AbstractAuthenticationProcessingFilter中的代码时,我发现当IDP使用redirect-uri重定向回应用程序时,它将/context-path/login/oauth2/code/okta作为重定向端点,但过滤器处理url的默认值如下所示。DEFAULT_FILTER_PROCESSES_URI=“/login/oauth2/code/*";
这将评估requiresAuthentication()始终为false,因为正则表达式不匹配。
要修复这个问题,我们需要将.redirectionEndpoint().baseUri(“/context-path/login/oauth2/code/okta”)添加到安全配置过滤器bean中。

相关问题