我已经实现了 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调试时,找不到此类对象。我分享以下内容供参考。我想现在它与服务器比与代理更相关。
答案 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>
我希望这对有人偶然发现相同问题的情况有所帮助。欢迎任何答案/评论。