Skip to content

Commit 05caf3d

Browse files
committed
Use Jwt.Builder
Fixes gh-7443
1 parent 40901fe commit 05caf3d

File tree

25 files changed

+247
-389
lines changed

25 files changed

+247
-389
lines changed

config/src/test/java/org/springframework/security/config/annotation/rsocket/JwtITests.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
*/
1616
package org.springframework.security.config.annotation.rsocket;
1717

18+
import java.util.ArrayList;
19+
import java.util.Arrays;
20+
import java.util.List;
21+
1822
import io.rsocket.RSocketFactory;
1923
import io.rsocket.frame.decoder.PayloadDecoder;
2024
import io.rsocket.transport.netty.server.CloseableChannel;
@@ -23,6 +27,8 @@
2327
import org.junit.Before;
2428
import org.junit.Test;
2529
import org.junit.runner.RunWith;
30+
import reactor.core.publisher.Mono;
31+
2632
import org.springframework.beans.factory.annotation.Autowired;
2733
import org.springframework.context.annotation.Bean;
2834
import org.springframework.context.annotation.Configuration;
@@ -34,21 +40,14 @@
3440
import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames;
3541
import org.springframework.security.oauth2.jwt.Jwt;
3642
import org.springframework.security.oauth2.jwt.ReactiveJwtDecoder;
43+
import org.springframework.security.oauth2.jwt.TestJwts;
3744
import org.springframework.security.rsocket.core.PayloadSocketAcceptorInterceptor;
3845
import org.springframework.security.rsocket.core.SecuritySocketAcceptorInterceptor;
3946
import org.springframework.security.rsocket.metadata.BasicAuthenticationEncoder;
4047
import org.springframework.security.rsocket.metadata.BearerTokenMetadata;
4148
import org.springframework.stereotype.Controller;
4249
import org.springframework.test.context.ContextConfiguration;
4350
import org.springframework.test.context.junit4.SpringRunner;
44-
import reactor.core.publisher.Mono;
45-
46-
import java.time.Instant;
47-
import java.util.ArrayList;
48-
import java.util.Arrays;
49-
import java.util.HashMap;
50-
import java.util.List;
51-
import java.util.Map;
5251

5352
import static org.assertj.core.api.Assertions.assertThat;
5453
import static org.mockito.Matchers.any;
@@ -114,13 +113,11 @@ public void routeWhenAuthorized() {
114113
}
115114

116115
private Jwt jwt() {
117-
Map<String, Object> claims = new HashMap<>();
118-
claims.put(IdTokenClaimNames.ISS, "https://issuer.example.com");
119-
claims.put(IdTokenClaimNames.SUB, "rob");
120-
claims.put(IdTokenClaimNames.AUD, Arrays.asList("client-id"));
121-
Instant issuedAt = Instant.now();
122-
Instant expiresAt = Instant.from(issuedAt).plusSeconds(3600);
123-
return new Jwt("token", issuedAt, expiresAt, claims, claims);
116+
return TestJwts.jwt()
117+
.claim(IdTokenClaimNames.ISS, "https://issuer.example.com")
118+
.claim(IdTokenClaimNames.SUB, "rob")
119+
.claim(IdTokenClaimNames.AUD, Arrays.asList("client-id"))
120+
.build();
124121
}
125122

126123
private RSocketRequester.Builder requester() {

config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurerTests.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,20 @@
1515
*/
1616
package org.springframework.security.config.annotation.web.configurers.oauth2.client;
1717

18+
import java.time.Instant;
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.Collections;
22+
import java.util.HashMap;
23+
import java.util.List;
24+
import java.util.Map;
25+
1826
import org.apache.http.HttpHeaders;
1927
import org.junit.After;
2028
import org.junit.Before;
2129
import org.junit.Rule;
2230
import org.junit.Test;
31+
2332
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
2433
import org.springframework.beans.factory.annotation.Autowired;
2534
import org.springframework.context.ApplicationListener;
@@ -79,19 +88,12 @@
7988
import org.springframework.test.web.servlet.MockMvc;
8089
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
8190

82-
import java.time.Instant;
83-
import java.util.ArrayList;
84-
import java.util.Arrays;
85-
import java.util.Collections;
86-
import java.util.HashMap;
87-
import java.util.List;
88-
import java.util.Map;
89-
9091
import static org.assertj.core.api.Assertions.assertThat;
9192
import static org.assertj.core.api.Assertions.assertThatThrownBy;
9293
import static org.mockito.ArgumentMatchers.any;
9394
import static org.mockito.Mockito.mock;
9495
import static org.mockito.Mockito.when;
96+
import static org.springframework.security.oauth2.jwt.TestJwts.jwt;
9597
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
9698
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
9799
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
@@ -937,8 +939,7 @@ private static JwtDecoder getJwtDecoder() {
937939
claims.put(IdTokenClaimNames.ISS, "http://localhost/iss");
938940
claims.put(IdTokenClaimNames.AUD, Arrays.asList("clientId", "a", "u", "d"));
939941
claims.put(IdTokenClaimNames.AZP, "clientId");
940-
Jwt jwt = new Jwt("token123", Instant.now(), Instant.now().plusSeconds(3600),
941-
Collections.singletonMap("header1", "value1"), claims);
942+
Jwt jwt = jwt().claims(c -> c.putAll(claims)).build();
942943
JwtDecoder jwtDecoder = mock(JwtDecoder.class);
943944
when(jwtDecoder.decode(any())).thenReturn(jwt);
944945
return jwtDecoder;

config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurerTests.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,15 @@
8383
import org.springframework.security.oauth2.core.OAuth2Error;
8484
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
8585
import org.springframework.security.oauth2.core.OAuth2TokenValidatorResult;
86-
import org.springframework.security.oauth2.jose.jws.JwsAlgorithms;
8786
import org.springframework.security.oauth2.jwt.Jwt;
8887
import org.springframework.security.oauth2.jwt.JwtClaimNames;
8988
import org.springframework.security.oauth2.jwt.JwtDecoder;
9089
import org.springframework.security.oauth2.jwt.JwtException;
9190
import org.springframework.security.oauth2.jwt.JwtTimestampValidator;
9291
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;
92+
import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication;
9393
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
9494
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
95-
import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication;
9695
import org.springframework.security.oauth2.server.resource.introspection.NimbusOpaqueTokenIntrospector;
9796
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
9897
import org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationEntryPoint;
@@ -131,6 +130,7 @@
131130
import static org.springframework.security.oauth2.core.TestOAuth2AccessTokens.noScopes;
132131
import static org.springframework.security.oauth2.jwt.NimbusJwtDecoder.withJwkSetUri;
133132
import static org.springframework.security.oauth2.jwt.NimbusJwtDecoder.withPublicKey;
133+
import static org.springframework.security.oauth2.jwt.TestJwts.jwt;
134134
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
135135
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
136136
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@@ -150,9 +150,8 @@
150150
public class OAuth2ResourceServerConfigurerTests {
151151
private static final String JWT_TOKEN = "token";
152152
private static final String JWT_SUBJECT = "mock-test-subject";
153-
private static final Map<String, Object> JWT_HEADERS = Collections.singletonMap("alg", JwsAlgorithms.RS256);
154153
private static final Map<String, Object> JWT_CLAIMS = Collections.singletonMap(JwtClaimNames.SUB, JWT_SUBJECT);
155-
private static final Jwt JWT = new Jwt(JWT_TOKEN, Instant.MIN, Instant.MAX, JWT_HEADERS, JWT_CLAIMS);
154+
private static final Jwt JWT = jwt().build();
156155
private static final String JWK_SET_URI = "https://mock.org";
157156
private static final JwtAuthenticationToken JWT_AUTHENTICATION_TOKEN =
158157
new JwtAuthenticationToken(JWT, Collections.emptyList());

config/src/test/java/org/springframework/security/config/web/server/OAuth2LoginTests.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.security.config.web.server;
1818

19-
import java.time.Instant;
2019
import java.util.Collections;
2120
import java.util.HashMap;
2221
import java.util.Map;
@@ -25,15 +24,6 @@
2524
import org.junit.Test;
2625
import org.mockito.stubbing.Answer;
2726
import org.openqa.selenium.WebDriver;
28-
29-
import org.springframework.security.core.AuthenticationException;
30-
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
31-
import org.springframework.security.oauth2.core.OAuth2Error;
32-
import org.springframework.security.web.server.WebFilterExchange;
33-
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationFailureHandler;
34-
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
35-
import org.springframework.security.web.server.authentication.ServerAuthenticationFailureHandler;
36-
import org.springframework.security.web.server.authentication.ServerAuthenticationSuccessHandler;
3727
import reactor.core.publisher.Mono;
3828

3929
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +36,7 @@
4636
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider;
4737
import org.springframework.security.config.test.SpringTestRule;
4838
import org.springframework.security.core.Authentication;
39+
import org.springframework.security.core.AuthenticationException;
4940
import org.springframework.security.core.authority.AuthorityUtils;
5041
import org.springframework.security.core.context.SecurityContext;
5142
import org.springframework.security.core.context.SecurityContextImpl;
@@ -56,14 +47,16 @@
5647
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
5748
import org.springframework.security.oauth2.client.endpoint.ReactiveOAuth2AccessTokenResponseClient;
5849
import org.springframework.security.oauth2.client.oidc.authentication.OidcAuthorizationCodeReactiveAuthenticationManager;
59-
import org.springframework.security.oauth2.client.oidc.web.server.logout.OidcClientInitiatedServerLogoutSuccessHandler;
6050
import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest;
51+
import org.springframework.security.oauth2.client.oidc.web.server.logout.OidcClientInitiatedServerLogoutSuccessHandler;
6152
import org.springframework.security.oauth2.client.registration.ClientRegistration;
6253
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository;
6354
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
6455
import org.springframework.security.oauth2.client.userinfo.ReactiveOAuth2UserService;
6556
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizationRequestResolver;
6657
import org.springframework.security.oauth2.core.OAuth2AccessToken;
58+
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
59+
import org.springframework.security.oauth2.core.OAuth2Error;
6760
import org.springframework.security.oauth2.core.TestOAuth2AccessTokens;
6861
import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
6962
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
@@ -84,7 +77,12 @@
8477
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
8578
import org.springframework.security.web.server.SecurityWebFilterChain;
8679
import org.springframework.security.web.server.WebFilterChainProxy;
80+
import org.springframework.security.web.server.WebFilterExchange;
81+
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationFailureHandler;
82+
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
8783
import org.springframework.security.web.server.authentication.ServerAuthenticationConverter;
84+
import org.springframework.security.web.server.authentication.ServerAuthenticationFailureHandler;
85+
import org.springframework.security.web.server.authentication.ServerAuthenticationSuccessHandler;
8886
import org.springframework.security.web.server.context.ServerSecurityContextRepository;
8987
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
9088
import org.springframework.test.web.reactive.server.WebTestClient;
@@ -100,6 +98,7 @@
10098
import static org.mockito.Mockito.spy;
10199
import static org.mockito.Mockito.verify;
102100
import static org.mockito.Mockito.when;
101+
import static org.springframework.security.oauth2.jwt.TestJwts.jwt;
103102

104103
/**
105104
* @author Rob Winch
@@ -514,8 +513,7 @@ private ReactiveJwtDecoder getJwtDecoder() {
514513
claims.put(IdTokenClaimNames.ISS, "http://localhost/issuer");
515514
claims.put(IdTokenClaimNames.AUD, Collections.singletonList("client"));
516515
claims.put(IdTokenClaimNames.AZP, "client");
517-
Jwt jwt = new Jwt("id-token", Instant.now(), Instant.now().plusSeconds(3600),
518-
Collections.singletonMap("header1", "value1"), claims);
516+
Jwt jwt = jwt().claims(c -> c.putAll(claims)).build();
519517
return Mono.just(jwt);
520518
};
521519
}

config/src/test/java/org/springframework/security/config/web/server/OAuth2ResourceServerSpecTests.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import java.security.interfaces.RSAPublicKey;
2424
import java.security.spec.InvalidKeySpecException;
2525
import java.security.spec.RSAPublicKeySpec;
26-
import java.time.Instant;
2726
import java.util.Base64;
28-
import java.util.Collections;
2927
import java.util.Optional;
3028
import java.util.stream.Collectors;
3129
import java.util.stream.Stream;
@@ -61,7 +59,6 @@
6159
import org.springframework.security.core.authority.SimpleGrantedAuthority;
6260
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
6361
import org.springframework.security.oauth2.core.OAuth2Error;
64-
import org.springframework.security.oauth2.jose.jws.JwsAlgorithms;
6562
import org.springframework.security.oauth2.jwt.Jwt;
6663
import org.springframework.security.oauth2.jwt.ReactiveJwtDecoder;
6764
import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;
@@ -88,6 +85,7 @@
8885
import static org.mockito.Mockito.mock;
8986
import static org.mockito.Mockito.verify;
9087
import static org.mockito.Mockito.when;
88+
import static org.springframework.security.oauth2.jwt.TestJwts.jwt;
9189

9290
/**
9391
* Tests for {@link org.springframework.security.config.web.server.ServerHttpSecurity.OAuth2ResourceServerSpec}
@@ -114,9 +112,7 @@ public class OAuth2ResourceServerSpecTests {
114112
" ]\n" +
115113
"}\n";
116114

117-
private Jwt jwt = new Jwt("token", Instant.MIN, Instant.MAX,
118-
Collections.singletonMap("alg", JwsAlgorithms.RS256),
119-
Collections.singletonMap("sub", "user"));
115+
private Jwt jwt = jwt().build();
120116

121117
private String clientId = "client";
122118
private String clientSecret = "secret";

oauth2/oauth2-client/spring-security-oauth2-client.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies {
1212
optional 'org.springframework:spring-webflux'
1313

1414
testCompile project(path: ':spring-security-oauth2-core', configuration: 'tests')
15+
testCompile project(path: ':spring-security-oauth2-jose', configuration: 'tests')
1516
testCompile powerMock2Dependencies
1617
testCompile 'com.squareup.okhttp3:mockwebserver'
1718
testCompile 'com.fasterxml.jackson.core:jackson-databind'

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/oidc/authentication/OidcAuthorizationCodeAuthenticationProviderTests.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,22 @@
1515
*/
1616
package org.springframework.security.oauth2.client.oidc.authentication;
1717

18+
import java.time.Instant;
19+
import java.util.Arrays;
20+
import java.util.Collections;
21+
import java.util.HashMap;
22+
import java.util.LinkedHashSet;
23+
import java.util.List;
24+
import java.util.Map;
25+
import java.util.Set;
26+
1827
import org.junit.Before;
1928
import org.junit.Rule;
2029
import org.junit.Test;
2130
import org.junit.rules.ExpectedException;
2231
import org.mockito.ArgumentCaptor;
2332
import org.mockito.stubbing.Answer;
33+
2434
import org.springframework.security.core.GrantedAuthority;
2535
import org.springframework.security.core.authority.AuthorityUtils;
2636
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
@@ -44,24 +54,18 @@
4454
import org.springframework.security.oauth2.jwt.JwtDecoder;
4555
import org.springframework.security.oauth2.jwt.JwtException;
4656

47-
import java.time.Instant;
48-
import java.util.Arrays;
49-
import java.util.Collections;
50-
import java.util.HashMap;
51-
import java.util.LinkedHashSet;
52-
import java.util.List;
53-
import java.util.Map;
54-
import java.util.Set;
55-
5657
import static org.assertj.core.api.Assertions.assertThat;
5758
import static org.hamcrest.CoreMatchers.containsString;
58-
import static org.mockito.ArgumentMatchers.*;
59+
import static org.mockito.ArgumentMatchers.any;
60+
import static org.mockito.ArgumentMatchers.anyCollection;
61+
import static org.mockito.ArgumentMatchers.anyString;
5962
import static org.mockito.Mockito.mock;
6063
import static org.mockito.Mockito.when;
6164
import static org.springframework.security.oauth2.client.registration.TestClientRegistrations.clientRegistration;
6265
import static org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationRequests.request;
6366
import static org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationResponses.error;
6467
import static org.springframework.security.oauth2.core.endpoint.TestOAuth2AuthorizationResponses.success;
68+
import static org.springframework.security.oauth2.jwt.TestJwts.jwt;
6569

6670
/**
6771
* Tests for {@link OidcAuthorizationCodeAuthenticationProvider}.
@@ -299,16 +303,7 @@ public void authenticateWhenTokenSuccessResponseThenAdditionalParametersAddedToU
299303
}
300304

301305
private void setUpIdToken(Map<String, Object> claims) {
302-
Instant issuedAt = Instant.now();
303-
Instant expiresAt = Instant.from(issuedAt).plusSeconds(3600);
304-
this.setUpIdToken(claims, issuedAt, expiresAt);
305-
}
306-
307-
private void setUpIdToken(Map<String, Object> claims, Instant issuedAt, Instant expiresAt) {
308-
Map<String, Object> headers = new HashMap<>();
309-
headers.put("alg", "RS256");
310-
311-
Jwt idToken = new Jwt("id-token", issuedAt, expiresAt, headers, claims);
306+
Jwt idToken = jwt().claims(c -> c.putAll(claims)).build();
312307

313308
JwtDecoder jwtDecoder = mock(JwtDecoder.class);
314309
when(jwtDecoder.decode(anyString())).thenReturn(idToken);

0 commit comments

Comments
 (0)