【问题标题】:Stateless Spring JWT Application + EnableOAuth2Client无状态 Spring JWT 应用程序 + EnableOAuth2Client
【发布时间】:2018-12-29 14:07:31
【问题描述】:

我在这个解决方案上投入了 50 多个小时,如果有任何意见,我将不胜感激。

我有一个使用 Angular + Spring + JWT 无状态身份验证 (myApp) 生成的 JHipster 4.x 应用程序。我正在为经过身份验证的 myApp 用户连接第 3 方 OAuth 2 接口(battle.net)到针对 Battle.net 的 OAuth,这样我们就可以证明他们拥有 Battle.net 帐户并提取他们的 Battle.net 用户 ID,以便将帐户链接到我的应用程序。所以 JWT 南行,OAuth2 北行。

JWT 工作正常,OAuth 似乎工作正常。我正在苦苦挣扎,因为 myApp 使用无状态 JWT 令牌,而 Spring @EnableOAuth2Client 使用 JSESSIONID,我似乎无法将两者结合在一起,因此我可以将从战网调用返回的数据与 myApp 主体相关联。 Battle.net 在成功验证后使用回调 URL,我可以在 myApp PrincipalExtractor 和 myApp AuthenticationSuccessHandler 中看到有效数据,但由于没有提供 JWT 令牌,我无法将 Battle.net 数据链接到 myApp用户。

** 用户发起 OAuth **

用户 -- JWT --> myApp /login/battlenet --> Battle.net /oauth/*

**战网回调成功**

battle.net --> myApp /callback/battlenet - 这是很好的战网数据,但没有 JWT 令牌,因此 Principal 是 anonymousUser。

我看到 '&redirectUri=xxx&response_type=yyy&code=xxx' 在 '/oauth/authorize' 请求中被传递给了战网。有没有办法通过@EnableOAuth2Client 将链接数据传递到根据OAuth2 规范在回调中返回的battle.net?我认为这会解决我的问题。

spring-core-4.3.13 spring-boot-starter-security-1.5.9 spring-security-core-4.2.4 spring-security-oauth2-2.0.14

谢谢!

【问题讨论】:

    标签: oauth-2.0 jwt jhipster spring-security-oauth2


    【解决方案1】:

    我找到了一种传递链接数据的方法。我希望它可以帮助别人。 :)

    @Bean
    public OAuth2ClientContextFilter oauth2ClientContextFilter() {
        OAuth2ClientContextFilter oauth2ClientContextFilter = new OAuth2ClientContextFilter();
        oauth2ClientContextFilter.setRedirectStrategy(new BMAOAuthRedirectStrategy());
        return oauth2ClientContextFilter;
    }
    
    class BMAOAuthRedirectStrategy extends DefaultRedirectStrategy {
        @Override
        public void sendRedirect(HttpServletRequest request, HttpServletResponse response, String url) throws IOException {
            url = url.concat("&bma_uuid=MY_LINKING_DATA");
            String redirectUrl = calculateRedirectUrl(request.getContextPath(), url);
            redirectUrl = response.encodeRedirectURL(redirectUrl);
            if (logger.isDebugEnabled()) {
                logger.debug("Custom BMA SecurityConfiguration Redirecting to '" + redirectUrl + "'");
            }
            response.sendRedirect(redirectUrl);
        }
    }
    

    【讨论】:

    • 我正在寻找这个解决方案的反面。当从 OAuth2 重定向回您的应用程序时,如果 JWT 令牌由 OAuth2 服务器提供,如何提取它。我的问题详情在stackoverflow.com/questions/59406225/…
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多