Rest 重新启动oAuth2 http状态代码401

Rest 重新启动oAuth2 http状态代码401,rest,oauth-2.0,spring-security-oauth2,rest-assured,Rest,Oauth 2.0,Spring Security Oauth2,Rest Assured,我正在尝试使用restasured库和springmvcrestoauth2安全端点实现集成测试 这是我的测试: @Test public void testCreateDecision() throws Exception { File createDecisionJsonFile = ResourceUtils.getFile(getClass().getResource("/json/decisions/create-decision.json")); // @forma

我正在尝试使用restasured库和springmvcrestoauth2安全端点实现集成测试

这是我的测试:

@Test
public void testCreateDecision() throws Exception {
    File createDecisionJsonFile = ResourceUtils.getFile(getClass().getResource("/json/decisions/create-decision.json"));

    // @formatter:off
    final String createDecisionRequest = FileUtils.readFileToString(createDecisionJsonFile)
            .replace("{{name}}", "Test decision name")
            .replace("{{description}}", "Test decision description");
    // @formatter:on

    String accessToken = getAccessToken("user", "user");

    // @formatter:off
    given()
        .auth()
        .oauth2(accessToken, OAuthSignature.HEADER)
        .body(createDecisionRequest)
        .contentType("application/json; charset=UTF-8")
    .when()
        .post(format("http://localhost:%d/api/v1.0/decisions/create", port))
    .then()
        .statusCode(200)
        .contentType(ContentType.JSON)
        .body("id", notNullValue())
        .body("createDate", notNullValue());
    // @formatter:on

}
accessToken是有效的,但是我不断地得到401HTTP代码。
我的代码可能有什么问题?

我已经使用OAuth2RestTemplate重新实现了测试:

ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails();

resourceDetails.setUsername("user");
resourceDetails.setPassword("user");
resourceDetails.setAccessTokenUri(format("http://localhost:%d/oauth/token", port));
resourceDetails.setClientId("clientapp");
resourceDetails.setClientSecret("123456");
resourceDetails.setGrantType("password");
resourceDetails.setScope(asList("read", "write"));

DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext();

OAuth2RestTemplate auth2RestTemplate = new OAuth2RestTemplate(resourceDetails, clientContext);
auth2RestTemplate.setMessageConverters(asList(new MappingJackson2HttpMessageConverter()));

Assert.assertNotNull(auth2RestTemplate.getAccessToken());

DecisionRequest decisionRequest = new DecisionRequest(name, description, parentDecisionId);

auth2RestTemplate.postForObject(format("http://localhost:%d/api/v1.0/decisions/create", port), decisionRequest, Decision.class);

我知道这是一篇老文章,但我只是想记录下这篇文章,以防其他人需要答案。 我能够使用以下格式实现:

首先检索令牌(在我的例子中,我没有存储用户令牌,只是在每次测试之前获取了它们)

在测试中,我使用了检索到的令牌:

@Test
public void testGetUserDefaultUserOwner() {


    authenticateUser(testData.user1.getLogin(), "1");

    User user = 
        given()
            .auth().oauth2(accessToken)
            .contentType(ContentType.JSON)
            .accept(ContentType.JSON)
        .expect()
            .log().all()
            .statusCode(HttpStatus.OK.value())
        .when()
            .get(USER_RESOURCE, testData.user1.getId())
            .as(User.class);

    assertThat(user).isEqualTo(testData.user1);
}   
我使用restasured和AssertJ进行测试,使用SpringBoot和OAuth2进行restapi。


302发现
建立
文档已移动


我不知道rest-assured在幕后是如何工作的,但是通过启用调试日志(org.springframework.Security),您可以看到Spring Security中发生了什么。它可能会告诉您标题丢失或格式不正确。谢谢!我想,我发现了一个类似的问题,是否有一些基于重启库的解决方法来避免这个问题?我假设您可以设置一个标题。只需设置“授权:持票人$TOKEN”。
@Test
public void testGetUserDefaultUserOwner() {


    authenticateUser(testData.user1.getLogin(), "1");

    User user = 
        given()
            .auth().oauth2(accessToken)
            .contentType(ContentType.JSON)
            .accept(ContentType.JSON)
        .expect()
            .log().all()
            .statusCode(HttpStatus.OK.value())
        .when()
            .get(USER_RESOURCE, testData.user1.getId())
            .as(User.class);

    assertThat(user).isEqualTo(testData.user1);
}