Authorization_code授权重定向问题

时间:2019-07-30 13:42:04

标签: apache spring-boot proxy wildfly spring-security-oauth2

我已经实现了 authorization_code 授予流程,该流程在我的Auth Server在本地运行时可以正常工作。

  • 客户端通过以下方式重定向到身份验证服务器登录页面 /oauth/authorize终点。

  • 成功登录后,它将重定向到redirect_uri调用中提供的/oauth/authorize,并在其中获得authorization_code

很好。

问题是 将Auth Server放在代理后面 ,最后一步是成功登录客户端后,应该获得{{ 1}}上的重定向资源根本不起作用。它总是被重定向到Auth Server的 root

为解决这个问题,我创建了一个authorization_code,在其中我按如下方式配置了AuthenticationSuccessHandler

UsernamePasswordAuthenticationFilter

我还按照此处的建议在代理级别进行了一些配置。

@Bean
public SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler() {
    SavedRequestAwareAuthenticationSuccessHandler savedSuccessHandler = new SavedRequestAwareAuthenticationSuccessHandler();
    savedSuccessHandler.setUseReferer(true);
    return savedSuccessHandler;
}

@Bean
public UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter() throws Exception
{
    UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter = new UsernamePasswordAuthenticationFilter();

    usernamePasswordAuthenticationFilter.setAuthenticationManager(authenticationManager());
    usernamePasswordAuthenticationFilter.setAuthenticationSuccessHandler(successRedirectHandler());

    return usernamePasswordAuthenticationFilter;
}

然后将以下内容添加到我的application.properties

<VirtualHost *:443>
ServerName my.domain.com
ProxyPass / http://127.0.0.1:8080/
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On
</VirtualHost>

但以上方法均无效。我也尝试了其他一些选择,但我想这里不值得一提。

我无法确定是否遗漏了某些东西或某些配置错误。

更新:成功进行server.use-forward-headers=true 本身登录重定向不会发生,但是如果登录失败,它将被重定向到/ouath/authorize到登录页面

此外,它在 Tomcat 上本地运行,但在代理后面的 Wildfly 上运行。我对其进行了调试,发现Tomcat中有一个库:/login?error维护着一个org.apache.coyote.http11.AbstractHttp11Processor对象,该对象持有带有所有参数的原始RequestInfo请求。通过Wildfly调试时,找不到此类对象。我分享以下内容供参考。我想现在它与服务器比与代理更相关。

在tomcat上调试 Debugging on tomcat

1 个答案:

答案 0 :(得分:0)

最初的问题仍然是个谜,我终于实现了实现(尽管不是正确的解决方案)。下面是完整的设置

  • 我尝试以jar形式打包和运行应用程序,但是在加载JSP时遇到了问题。为此,一些解决方案建议将所有JSP放在/src/main/resources/META-INF/resources/WEB-INF/jsp文件夹下。但就我而言,我无法使其正常运行。 作为解决方案,而不是将应用程序打包为jar,我将其打包为 WAR ,默认情况下使用JSP,然后将其作为 jar 运行,并嵌入了 Apache Tomcat 版本8.5.27(Spring Boot 1.5.10.RELEASE)

  • 为了在Tomcat上运行JSP,在pom文件中添加了以下内容

注意::我遇到的一些解决方案建议将<scope>的价值定为provided。就我而言,没有它就可以工作。明确提及,如下所述。

   <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>
   <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>

我希望这对有人偶然发现相同问题的情况有所帮助。欢迎任何答案/评论。