2017-08-30 162 views
1

需要Oauth2客户端的集成测试帮助。Spring oauth2和集成测试

设置:

  • 客户受保护的用户界面和API
  • 认证服务器所有 密码验证完成,访问令牌检索

集成测试:

  • 休息,保证用于端点检测
  • 之前实施的oauth2测试工作正常

奥莱测试例如:

 given().auth() 
      .preemptive() 
      .basic(USER_EMAIL,PASSWORD) <-- this not valid any more 
      .contentType(ContentType.JSON) 
      .when() 
      .pathParam("id","123") 
      .delete(PROFILE_FIELD_BASE_URL) 
      .andReturn() 
      .body(); 

问:

  • 我怎么能使这个测试再次工作?
  • 如何改变res-assured设置以支持oauth2?
  • 我需要模拟验证服务器或者我可以注入/模拟安全上下文吗?

回答

1

您显示的代码仅用于基本身份验证,并且只能用于OAuth的其他用户,一般而言,您必须更改该代码。从放心github page你可以看到以下两个exaples:

@Test public void 
oauth2_works_with_preemptive_header_signing() { 
    final String accessToken = "accessToken"; 

    given(). 
      auth().preemptive().oauth2(accessToken). 
      filter(new Filter() { 
       public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) { 
        assertThat(requestSpec.getHeaders().getValue("Authorization"), equalTo("Bearer "+accessToken)); 
        return new ResponseBuilder().setBody("ok").setStatusCode(200).build(); 
       } 
      }). 
    when(). 
      get("/somewhere"). 
    then(). 
      statusCode(200); 
} 

@Test public void 
oauth2_works_with_non_preemptive_header_signing() { 
    final String accessToken = "accessToken"; 

    given(). 
      auth().oauth2(accessToken). 
      filter(new Filter() { 
       public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) { 
        AuthenticationScheme scheme = requestSpec.getAuthenticationScheme(); 
        assertThat(scheme, instanceOf(PreemptiveOAuth2HeaderScheme.class)); 
        assertThat(((PreemptiveOAuth2HeaderScheme) scheme).getAccessToken(), equalTo(accessToken)); 
        return new ResponseBuilder().setBody("ok").setStatusCode(200).build(); 
       } 
      }). 
    when(). 
      get("/somewhere"). 
    then(). 
      statusCode(200); 
} 

,并作为其他例子,你可以看看here