我有以下设置:
HttpSecurity配置中配置oauth2Client()的第三方目前发生的情况是:
前端
spring.security.oauth2.client.registration.foobar.redirect-uri/api/get-library。401并触发Spring E 228 /api/get-libraryRestController,因此用户在浏览器中显示了一些JSON数据
所以第6点是我的问题。我不希望用户最终被重定向到某个API端点,我希望他被重定向到我的角应用程序的一个页面。
如果用户拒绝权限授予,也会出现类似的问题。然后,使用查询参数spring.security.oauth2.client.registration.foobar.redirect-uri将用户重定向到?error=true。在这种情况下,我希望重定向到我的角度应用程序。
最初,我想我也可以配置oauth2Login(),它有一个failureHandler和successHandler,但是在我的例子中没有调用它们,因为我在这里不做登录。
有人能帮我吗?如何为oauth2Client配置自己的重定向?万一成功,还是失败?这里有什么相关的豆子?
发布于 2022-10-12 19:37:08
我找到了一个解决办法:
要检查的主要Spring类是OAuth2AuthorizationCodeGrantFilter。当用户在OAuth提供程序上授予/拒绝权限时,将调用此筛选器。
不幸的是,无法为这个过滤器配置自定义的重定向Url,所以我实现了一个黑客解决方案:
OAuth2AuthorizationCodeGrantFilter的实现复制到自己的类中,并使用两个参数对其进行扩展:成功和错误返回Url。然后,我在processAuthorizationResponse方法中使用这些Urls重定向到我的UrlsAppOAuth2AuthorizationCodeGrantFilter放在HttpSecurityConfig中的Spring过滤器之前,因此它被用于代替Spring版本的这感觉很烦人,所以如果有人想出更好的解决方案,我会很高兴听到的。:-)
Spring的一些代码片段:
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.addFilterBefore(oAuth2AuthorizationCodeGrantFilter(), OAuth2AuthorizationCodeGrantFilter.class);
...
}
@Bean @Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public AppOAuth2AuthorizationCodeGrantFilter oAuth2AuthorizationCodeGrantFilter() throws Exception {
return new AppOAuth2AuthorizationCodeGrantFilter(
clientRegistrationRepository,
oAuth2AuthorizedClientRepository,
authenticationManagerBean(),
oauthSuccessRedirectUrl,
oauthErrorRedirectUrl);
}https://stackoverflow.com/questions/73998033
复制相似问题