Spring 安全 Oauth 客户端 - 像邮递员示例一样请求

Spring security Oauth client - Request like a postman example

我正在尝试执行执行 OAuth 流程的 JUnit 测试。

我的客户构建了一个 OAuth 提供程序,当我使用邮递员进行测试时,邮递员向我展示了一个屏幕来填写凭据,之后,邮递员存储了信息 (access_token, id_token, 所有JWT信息), 就可以了

看例子:

我要测试的代码是:

@Test
    public void getAccessTokenViaSpringSecurityOAuthClient() {
        try {

            OAuth2ProtectedResourceDetails resourceDetails = googleOAuth2Details();

            OAuth2RestTemplate oAuthRestTemplate = new OAuth2RestTemplate(resourceDetails);

            org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);

            OAuth2AccessToken token = oAuthRestTemplate.getAccessToken();
            System.out.println(oAuthRestTemplate.getResource());
            System.out.println(oAuthRestTemplate.getOAuth2ClientContext());
            System.out.println(token);

            Assert.assertTrue(token != null);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public OAuth2ProtectedResourceDetails googleOAuth2Details() {
        AuthorizationCodeResourceDetails googleOAuth2Details = new AuthorizationCodeResourceDetails();
        googleOAuth2Details.setClientId("xxxxx");
        googleOAuth2Details.setUserAuthorizationUri("https://xxx/yyy/oauth2/authorize");
        googleOAuth2Details.setAccessTokenUri("https://xxx/yyy/oauth2/token");
        googleOAuth2Details.setScope(Arrays.asList("openid"));
        googleOAuth2Details.setPreEstablishedRedirectUri("https://www.getpostman.com/oauth2/callback");
        googleOAuth2Details.setAuthenticationScheme(AuthenticationScheme.query);
        googleOAuth2Details.setClientAuthenticationScheme(AuthenticationScheme.form);

        return googleOAuth2Details;
    }

当我运行任务时,出现这个异常:

org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval

是否可以测试此流程? 我该怎么做?

异常说明了问题:A redirect is required to get the users approval

Postman 隐藏了这样一个事实,即一旦授权过程结束,授权服务器会将您的浏览器重定向到 redirect_uri,或 Postman 命名的回调 URL。 URL收集授权服务器下发的授权码,请求token
有关更多详细信息,请参阅授权代码流程:

这意味着您不能对授权服务器的授权代码授予进行“单元测试”。您需要某种网络服务器来处理授权代码流的回调。

通过使用 @EnableOAuth2Sso 创建一个 @SpringBootTest 和 Spring 引导应用程序,您可能会更快地测试您的授权。 Spring Boot 会为您自动配置 OAuth2RestTemplate,您可以在 JUnit 测试中使用它 @Autowired