Skip to content

Commit bf1b85b

Browse files
721806280jgrandja
authored andcommitted
Use configured ID Token signature algorithm
Closes spring-projectsgh-787
1 parent 2be31fb commit bf1b85b

File tree

2 files changed

+11
-7
lines changed
  • oauth2-authorization-server/src

2 files changed

+11
-7
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/token/JwtGenerator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,14 @@ public Jwt generate(OAuth2TokenContext context) {
8989

9090
Instant issuedAt = Instant.now();
9191
Instant expiresAt;
92+
JwsHeader.Builder headersBuilder;
9293
if (OidcParameterNames.ID_TOKEN.equals(context.getTokenType().getValue())) {
9394
// TODO Allow configuration for ID Token time-to-live
9495
expiresAt = issuedAt.plus(30, ChronoUnit.MINUTES);
96+
headersBuilder = JwsHeader.with(registeredClient.getTokenSettings().getIdTokenSignatureAlgorithm());
9597
} else {
9698
expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());
99+
headersBuilder = JwsHeader.with(SignatureAlgorithm.RS256);
97100
}
98101

99102
// @formatter:off
@@ -125,11 +128,9 @@ public Jwt generate(OAuth2TokenContext context) {
125128
}
126129
// @formatter:on
127130

128-
JwsHeader.Builder jwsHeaderBuilder = JwsHeader.with(SignatureAlgorithm.RS256);
129-
130131
if (this.jwtCustomizer != null) {
131132
// @formatter:off
132-
JwtEncodingContext.Builder jwtContextBuilder = JwtEncodingContext.with(jwsHeaderBuilder, claimsBuilder)
133+
JwtEncodingContext.Builder jwtContextBuilder = JwtEncodingContext.with(headersBuilder, claimsBuilder)
133134
.registeredClient(context.getRegisteredClient())
134135
.principal(context.getPrincipal())
135136
.authorizationServerContext(context.getAuthorizationServerContext())
@@ -148,7 +149,7 @@ public Jwt generate(OAuth2TokenContext context) {
148149
this.jwtCustomizer.customize(jwtContext);
149150
}
150151

151-
JwsHeader jwsHeader = jwsHeaderBuilder.build();
152+
JwsHeader jwsHeader = headersBuilder.build();
152153
JwtClaimsSet claims = claimsBuilder.build();
153154

154155
Jwt jwt = this.jwtEncoder.encode(JwtEncoderParameters.from(jwsHeader, claims));

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/token/JwtGeneratorTests.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,24 +201,27 @@ private void assertGeneratedTokenType(OAuth2TokenContext tokenContext) {
201201
ArgumentCaptor<JwtEncoderParameters> jwtEncoderParametersCaptor = ArgumentCaptor.forClass(JwtEncoderParameters.class);
202202
verify(this.jwtEncoder).encode(jwtEncoderParametersCaptor.capture());
203203

204-
JwsHeader jwsHeader = jwtEncoderParametersCaptor.getValue().getJwsHeader();
205-
assertThat(jwsHeader.getAlgorithm()).isEqualTo(SignatureAlgorithm.RS256);
206-
207204
JwtClaimsSet jwtClaimsSet = jwtEncoderParametersCaptor.getValue().getClaims();
208205
assertThat(jwtClaimsSet.getIssuer().toExternalForm()).isEqualTo(tokenContext.getAuthorizationServerContext().getIssuer());
209206
assertThat(jwtClaimsSet.getSubject()).isEqualTo(tokenContext.getAuthorization().getPrincipalName());
210207
assertThat(jwtClaimsSet.getAudience()).containsExactly(tokenContext.getRegisteredClient().getClientId());
211208

212209
Instant issuedAt = Instant.now();
213210
Instant expiresAt;
211+
JwsHeader.Builder headersBuilder;
214212
if (tokenContext.getTokenType().equals(OAuth2TokenType.ACCESS_TOKEN)) {
215213
expiresAt = issuedAt.plus(tokenContext.getRegisteredClient().getTokenSettings().getAccessTokenTimeToLive());
214+
headersBuilder = JwsHeader.with(SignatureAlgorithm.RS256);
216215
} else {
217216
expiresAt = issuedAt.plus(30, ChronoUnit.MINUTES);
217+
headersBuilder = JwsHeader.with(tokenContext.getRegisteredClient().getTokenSettings().getIdTokenSignatureAlgorithm());
218218
}
219219
assertThat(jwtClaimsSet.getIssuedAt()).isBetween(issuedAt.minusSeconds(1), issuedAt.plusSeconds(1));
220220
assertThat(jwtClaimsSet.getExpiresAt()).isBetween(expiresAt.minusSeconds(1), expiresAt.plusSeconds(1));
221221

222+
JwsHeader jwsHeader = jwtEncoderParametersCaptor.getValue().getJwsHeader();
223+
assertThat(jwsHeader.getAlgorithm()).isEqualTo(headersBuilder.build().getAlgorithm());
224+
222225
if (tokenContext.getTokenType().equals(OAuth2TokenType.ACCESS_TOKEN)) {
223226
assertThat(jwtClaimsSet.getNotBefore()).isBetween(issuedAt.minusSeconds(1), issuedAt.plusSeconds(1));
224227

0 commit comments

Comments
 (0)