【问题标题】: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

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 2016-11-14
      • 2015-05-19
      • 2012-04-22
      • 2017-06-28
      • 2015-10-16
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多