Rest 请放心使用digest auth

Rest 请放心使用digest auth,rest,jakarta-ee,spring-mvc,spring-security,rest-assured,Rest,Jakarta Ee,Spring Mvc,Spring Security,Rest Assured,我有一个可以正常工作的spring mvc应用程序,其中包含rest服务和一些可以放心的测试: @Test public void createFoobarFromScratchReturns201(){ expect().statusCode(201).given() .queryParam("foo", generateFoo()) .queryParam("bar", generateBar()) .when().post("/foo/bar/");

我有一个可以正常工作的spring mvc应用程序,其中包含rest服务和一些可以放心的测试:

@Test
public void createFoobarFromScratchReturns201(){
    expect().statusCode(201).given()    
    .queryParam("foo", generateFoo())
    .queryParam("bar", generateBar())
    .when().post("/foo/bar/");
}

=> OK
然后我实现了一个摘要身份验证。一切正常,现在我必须登录才能使用我的服务:

curl http://localhost:8089/foo/bar
=> HTTP ERROR 401,  Full authentication is required to access this resource

curl http://localhost:8089/foo/bar --digest -u user_test:password
=> HTTP 201, CREATED
但当我尝试使用升级测试时,仍然存在一个401错误:

@Test
public void createFoobarFromScratchReturns201(){
    expect().statusCode(201).given()    
    .auth().digest("user_test", "password") // Digest added here
    .queryParam("foo", generateFoo())
    .queryParam("bar", generateBar())
    .when().post("/foo/bar/");
}

=> Expected status code <201> doesn't match actual status code <401>
目前,我正在努力实现两件事:

  • 我需要升级几个测试以支持摘要
  • 我需要修改我其余测试套件(与身份验证问题无关)的@Before,使其已登录

有什么想法或文档吗?

请尝试通过以下方式启用对嵌入到Rest Assured中的HTTP客户端中的cookie的支持:

 RestAssuredConfig config = new RestAssuredConfig().httpClient(new HttpClientConfig().setParam(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH));

 expect().statusCode(201).given()    
 .auth().digest("user_test", "password") // Digest added here
 .config(config)
 .queryParam("foo", generateFoo())
 .queryParam("bar", generateBar())
 .when().post("/foo/bar/");

HTTP客户端(因此请放心)支持摘要身份验证,并且使用
摘要
方法重新启动的配置运行良好。

它没有太大变化,我仍然有“接收响应:HTTP/1.1 401错误响应”和“DEBUG org.apache.http.headers-然后我就完全没有想法了,当我面临同样的问题时,它会有所帮助。由于您可以控制要进行身份验证的服务器,在您的位置上,我会尝试通过检查重新启动的实际情况并与curl的输入进行比较来排除故障-可能是编码问题。无论如何,感谢您的帮助,我比较了这两个请求,唯一的区别是头:nonce和response。这意味着消息没有正确地散列。我也在同一条轨道上,最终让HTTP客户端的代码为我知道正确结果的值计算散列。结果证明HTTP客户端得到的值是正确的。但这并不意味着你击中的两边都不会有虫子。如果你给我发送用户名+领域+密码+当前时间+cnonce,我可以再次通过HTTP客户端运行,看看是否得到相同的结果。谢谢,我将在周一完成
 RestAssuredConfig config = new RestAssuredConfig().httpClient(new HttpClientConfig().setParam(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH));

 expect().statusCode(201).given()    
 .auth().digest("user_test", "password") // Digest added here
 .config(config)
 .queryParam("foo", generateFoo())
 .queryParam("bar", generateBar())
 .when().post("/foo/bar/");