我正在使用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之后,必须以编程方式选择某些帐户(复选框)以及单击“提交”按钮,但这仍然需要打开浏览器。
答案 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();
...
}