【问题标题】:Spring oauth2 and integration testsSpring oauth2 和集成测试
【发布时间】:2018-02-08 05:48:35
【问题描述】:
在 Oauth2 客户端的集成测试方面需要帮助。
设置:
-
客户端,带有受保护的 UI 和 API
-
身份验证服务器
密码验证完成并检索到访问令牌
集成测试:
- 放心用于端点测试
- 在实施 Oauth2 测试之前运行良好
Ole 测试示例:
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();
问题:
- 我怎样才能让这个测试再次工作?
- 应如何更改安全设置以支持 oauth2?
- 我需要模拟身份验证服务器还是可以注入/模拟安全上下文?
【问题讨论】:
标签:
spring-boot
oauth-2.0
integration-testing
rest-assured
【解决方案1】:
您看到的代码仅用于基本身份验证和使用放心的 OAuth,通常,您必须更改该代码。从 REST Assured github page 你可以看到以下两个例子:
@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。