首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在收到令牌或失败时指定自定义返回Url?

如何在收到令牌或失败时指定自定义返回Url?
EN

Stack Overflow用户
提问于 2022-10-08 15:03:37
回答 1查看 55关注 0票数 -1

我有以下设置:

  • I有一个棱角的前端,Spring后端
  • 用户通过普通形式登录
  • 登录到我的后端,我正在集成一个第三方API,它需要oauth2身份验证,所以用户需要给我的应用程序授予权限,这样我就可以从我的HttpSecurity配置中配置oauth2Client()的第三方
  • 中加载数据,从而启用OAuth2H 210F 211。

目前发生的情况是:

前端

  1. 正在调用端点从第三方获取数据,让我们假设,尝试在第三方访问受保护资源的spring.security.oauth2.client.registration.foobar.redirect-uri
  2. Spring /api/get-library
  3. 这将导致来自第三方的401并触发Spring
  4. 中的oauth流,用户被重定向到第三方,在授予权限后将权限授予给MyApp
  5. ,用户首先被重定向到我指定为Principal
  6. After的Url,然后检索令牌并为我的Principal
  7. After存储它--SpringBoot重定向到原始的urlE 228 /api/get-library
  8. But --这只是一个RestController,因此用户在浏览器

中显示了一些JSON数据

所以第6点是我的问题。我不希望用户最终被重定向到某个API端点,我希望他被重定向到我的角应用程序的一个页面。

如果用户拒绝权限授予,也会出现类似的问题。然后,使用查询参数spring.security.oauth2.client.registration.foobar.redirect-uri将用户重定向到?error=true。在这种情况下,我希望重定向到我的角度应用程序。

最初,我想我也可以配置oauth2Login(),它有一个failureHandlersuccessHandler,但是在我的例子中没有调用它们,因为我在这里不做登录。

有人能帮我吗?如何为oauth2Client配置自己的重定向?万一成功,还是失败?这里有什么相关的豆子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 19:37:08

我找到了一个解决办法:

要检查的主要Spring类是OAuth2AuthorizationCodeGrantFilter。当用户在OAuth提供程序上授予/拒绝权限时,将调用此筛选器。

不幸的是,无法为这个过滤器配置自定义的重定向Url,所以我实现了一个黑客解决方案:

  1. I将OAuth2AuthorizationCodeGrantFilter的实现复制到自己的类中,并使用两个参数对其进行扩展:成功和错误返回Url。然后,我在processAuthorizationResponse方法中使用这些Urls重定向到我的Urls
  2. ,然后将自己的AppOAuth2AuthorizationCodeGrantFilter放在HttpSecurityConfig中的Spring过滤器之前,因此它被用于代替Spring版本的
  3. ,在我的角度应用程序中,我在调用可能需要OAuth身份验证的终结点之前在应用程序中存储确切的位置。因此,当用户代理返回到角应用程序时,我可以导航回原点。

这感觉很烦人,所以如果有人想出更好的解决方案,我会很高兴听到的。:-)

Spring的一些代码片段:

代码语言:javascript
复制
    @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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73998033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档