当前位置: 首页 > 知识库问答 >
问题:

spring oauth2和集成测试

党博超
2023-03-14

需要对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();

问题:

  • 如何使此测试再次工作?
  • 应如何更改res-assured设置以支持OAuth2?
  • 是否需要模拟身份验证服务器,或者是否可以注入/mock安全上下文?

共有1个答案

锺星洲
2023-03-14

您所显示的代码仅用于基本身份验证和使用OAuth的RESS assured,一般来说,您必须更改该代码。在Reset Assured github页面中,您可以看到以下两个细节:

    @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);
}

作为另一个例子,你可以看看这里。

 类似资料:
  • 我试图在Angular应用程序中调用我的登录服务,但我遇到了CORS错误。我已经在WebSecurity配置适配器上添加了cors配置。我已经尝试了下面的一些配置。邮递员一切都很好。 授权服务器配置RADAPTER 资源服务器配置RADAPTER Web安全配置r适配器

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/continous_integration.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e PX4 Continuous Integration PX4 builds and

  • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/README.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e 测试与持续集成 PX4提供大量的测试和持续集成。 本页提供概述。 在本地机器上测试 下面这条命令足够打开一个带有运

  • 我通过实现MessageListener接口并设置SimpleMessageListenerContainer编写了RabbitMQ消费者。当我手动测试它时,它运行良好。现在我想编写一个联调: 创建消息 将消息推送到我的RabbitMQ服务器 等待消息被我的MessageListener实现消耗 测试做了一些断言,一旦一切都完成了 然而,由于我的MessageListener是在一个单独的线程中运

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/jenkins_ci.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e Jenkins CI Jenkins continuous integration server on S