Skip to content

Commit 20a7bc4

Browse files
committed
Improved DigestAuthenticationFilter Test Coverage
Issue: gh-5462
1 parent d88c2c1 commit 20a7bc4

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

web/src/test/java/org/springframework/security/web/authentication/www/DigestAuthenticationFilterTests.java

+27-7
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,8 @@
1616

1717
package org.springframework.security.web.authentication.www;
1818

19-
import static org.assertj.core.api.Assertions.assertThat;
20-
import static org.mockito.Mockito.mock;
21-
import static org.mockito.Mockito.times;
22-
import static org.mockito.Mockito.verify;
23-
2419
import java.io.IOException;
2520
import java.util.Map;
26-
2721
import javax.servlet.Filter;
2822
import javax.servlet.FilterChain;
2923
import javax.servlet.ServletException;
@@ -34,6 +28,7 @@
3428
import org.junit.After;
3529
import org.junit.Before;
3630
import org.junit.Test;
31+
3732
import org.springframework.mock.web.MockHttpServletRequest;
3833
import org.springframework.mock.web.MockHttpServletResponse;
3934
import org.springframework.security.authentication.TestingAuthenticationToken;
@@ -47,6 +42,11 @@
4742
import org.springframework.security.core.userdetails.cache.NullUserCache;
4843
import org.springframework.util.StringUtils;
4944

45+
import static org.assertj.core.api.Assertions.assertThat;
46+
import static org.mockito.Mockito.mock;
47+
import static org.mockito.Mockito.times;
48+
import static org.mockito.Mockito.verify;
49+
5050
/**
5151
* Tests {@link DigestAuthenticationFilter}.
5252
*
@@ -110,8 +110,12 @@ private MockHttpServletResponse executeFilterInContainerSimulator(Filter filter,
110110
}
111111

112112
private static String generateNonce(int validitySeconds) {
113+
return generateNonce(validitySeconds, KEY);
114+
}
115+
116+
private static String generateNonce(int validitySeconds, String key) {
113117
long expiryTime = System.currentTimeMillis() + (validitySeconds * 1000);
114-
String signatureValue = DigestUtils.md5Hex(expiryTime + ":" + KEY);
118+
String signatureValue = DigestUtils.md5Hex(expiryTime + ":" + key);
115119
String nonceValue = expiryTime + ":" + signatureValue;
116120

117121
return new String(Base64.encodeBase64(nonceValue.getBytes()));
@@ -172,6 +176,22 @@ public void testExpiredNonceReturnsForbiddenWithStaleHeader() throws Exception {
172176
assertThat(headerMap.get("stale")).isEqualTo("true");
173177
}
174178

179+
@Test
180+
public void doFilterWhenNonceHasBadKeyThenGeneratesError() throws Exception {
181+
String badNonce = generateNonce(60, "badkey");
182+
String responseDigest = DigestAuthUtils.generateDigest(false, USERNAME, REALM,
183+
PASSWORD, "GET", REQUEST_URI, QOP, badNonce, NC, CNONCE);
184+
185+
request.addHeader("Authorization", createAuthorizationHeader(USERNAME, REALM,
186+
badNonce, REQUEST_URI, responseDigest, QOP, NC, CNONCE));
187+
188+
MockHttpServletResponse response =
189+
executeFilterInContainerSimulator(filter, request, false);
190+
191+
assertThat(response.getStatus()).isEqualTo(401);
192+
assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull();
193+
}
194+
175195
@Test
176196
public void testFilterIgnoresRequestsContainingNoAuthorizationHeader()
177197
throws Exception {

0 commit comments

Comments
 (0)