2017-08-30 209 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