无状态 Spring JWT 应用程序 + EnableOAuth2Client

2024-04-17

我在这个解决方案上花费了 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,而且我似乎无法将两者结合在一起,因此我可以将从 Battle.net 调用返回的数据关联到 myApp 主体。 Battle.net 在成功身份验证后使用回调 URL,我可以在 myApp PrimaryExtractor 和 myApp AuthenticationSuccessHandler 中看到有效数据,但由于没有提供 JWT 令牌,我无法将 Battle.net 数据链接到 myApp用户。

** 用户启动 OAuth **

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

**战网回调成功**

Battle.net --> myApp /callback/battlenet - 这是很好的战网数据,但没有 JWT 令牌,因此主体是匿名用户。

我看到“&redirectUri=xxx&response_type=yyy&code=xxx”在“/oauth/authorize”请求上被传递到 Battle.net。有没有办法将链接数据传递到 Battle.net,该数据是根据 OAuth2 规范使用 @EnableOAuth2Client 在回调中返回的?我认为这会解决我的问题。

弹簧芯-4.3.13 spring-boot-starter-security-1.5.9 弹簧安全核心-4.2.4 弹簧安全-oauth2-2.0.14

Thanks!


我找到了一种传递链接数据的方法。我希望它对其他人有帮助。 :)

@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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无状态 Spring JWT 应用程序 + EnableOAuth2Client 的相关文章

随机推荐