春季:在不打开浏览器的情况下填充OAuth2表单

时间:2019-03-24 20:10:43

标签: java spring spring-boot spring-mvc

我正在使用OAuth2应用程序。 为了测试后端服务,我希望测试用户以编程方式登录并查询API,然后声明响应。

换句话说,我正在尝试使用Spring(Apache http)进行以下操作:

    HttpPost httpPost = new HttpPost(
            "https://foo/authsvc?PolicyId=urn:bar:security:authentication:asf:nidlogin&Target=https://foo/mga/sps/auth");
    java.util.List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("username", "john"));
    nvps.add(new BasicNameValuePair("password", "doe"));
    nvps.add(new BasicNameValuePair("operation", "verify"));

    httpPost.setEntity(new UrlEncodedFormEntity(nvps));

    response = httpClient.execute(httpPost);

问题

这怎么用Spring完成?

编辑

我不想模拟OAUth身份验证。

OAuth之后,必须以编程方式选择某些帐户(复选框)以及单击“提交”按钮,但这仍然需要打开浏览器。

1 个答案:

答案 0 :(得分:0)

您可以使用密码流进行测试。此流程不需要浏览器。参见:OAuth RFC

示例:

 POST /token HTTP/1.1
 Host: server.example.com
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
 Content-Type: application/x-www-form-urlencoded

 grant_type=password&username=johndoe&password=A3ddj3w

编辑:

如果要测试登录流程,可以使用MockMvc。 (https://spring.io/guides/gs/testing-web

示例:

@Before
public final void init() {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .apply(SecurityMockMvcConfigurers.springSecurity())
            .build();
}

@Test
public void test() throws Exception {
    ...

    MvcResult result = mockMvc.perform(
            post("/login")
                    .content(...)
            )
            .andExpect(status().isOk())
            .andReturn();

    MockHttpServletResponse response = result.getResponse();

    ...
}