Authorization_code 授权重定向问题
Posted
技术标签:
【中文标题】Authorization_code 授权重定向问题【英文标题】:Authorization_code grant redirection issue 【发布时间】:2019-12-07 22:27:01 【问题描述】:我已经实现了 authorization_code 授权流程,当我的身份验证服务器在本地运行时可以正常工作。
客户端通过重定向到身份验证服务器登录页面
/oauth/authorize
端点。
在成功登录时,它会被重定向到/oauth/authorize
调用中提供的redirect_uri
,它会在其中获得authorization_code
。
很好。
问题是当 Auth Server 放在代理后面时在成功登录客户端后的最后一步应该获取@987654327 @ 重定向资源根本不起作用。它总是被重定向到 Auth Server 的 root。
为了处理这个问题,我创建了一个UsernamePasswordAuthenticationFilter
,我在其中配置了 AuthenticationSuccessHandler,如下所示
@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;
我还按照此处的建议在代理级别进行了一些配置。
<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>
并在下面添加到我的 application.properties
server.use-forward-headers=true
但上述方法均无效。我也尝试了其他一些选项,但我想它们在这里不值得一提。
我不知道是遗漏了什么还是配置错误。
更新:成功登录重定向不会发生在/ouath/authorize
本身,但如果登录失败,它会被重定向到带有/login?error
的登录页面
此外,它在 Tomcat 上本地运行,但在代理后面的 Wildfly 上运行。我对其进行了调试,发现 Tomcat 中有一个库:org.apache.coyote.http11.AbstractHttp11Processor
,它维护了一个 RequestInfo
对象,该对象包含带有所有参数的原始 /oauth/authorize
请求。在 Wildfly 上进行调试时,找不到这样的对象。我分享以下内容以供参考。我想现在它与服务器的关系比代理更重要。
在 tomcat 上调试
【问题讨论】:
【参考方案1】:由于最初的问题仍然是个谜,我终于得到了实现(虽然不是一个合适的解决方案)。以下是完整的设置
我尝试将应用程序打包并作为 jar 运行,但随后遇到了加载 JSP 的问题。为此,一些解决方案建议将所有 JSP 放在 /src/main/resources/META-INF/resources/WEB-INF/jsp
文件夹下。但就我而言,我无法让它工作。
作为一种解决方案,我没有将应用程序打包为 jar,而是将其打包为带有默认 JSP 的 WAR,并将其作为带有嵌入式 Apache Tomcat 的 jar 运行
版本 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>
如果有人偶然发现同样的问题,我希望这会有所帮助。欢迎任何答案/cmets。
【讨论】:
以上是关于Authorization_code 授权重定向问题的主要内容,如果未能解决你的问题,请参考以下文章