我的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;
}
}
我花了很多时间才找到根本原因并解决问题。
1条答案
按热度按时间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中。