Spring oauth2 和集成测试
Spring oauth2 and integration tests
需要 Oauth2 客户端集成测试方面的帮助。
设置:
- Client with protected UI and 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?
- 我需要模拟 身份验证服务器 或者我可以 inject/mock 安全上下文吗?
您看到的代码仅用于基本身份验证和使用 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);
}
另外一个例子,大家可以看看.
需要 Oauth2 客户端集成测试方面的帮助。
设置:
- Client with protected UI and 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?
- 我需要模拟 身份验证服务器 或者我可以 inject/mock 安全上下文吗?
您看到的代码仅用于基本身份验证和使用 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);
}
另外一个例子,大家可以看看