Skip to content

Commit f672f60

Browse files
committed
fix(jans-auth-server): Duplicate iss and aud on introspection as jwt #3366
1 parent ebca16b commit f672f60

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

jans-auth-server/model/src/main/java/io/jans/as/model/jwt/JwtClaimSet.java

+18-4
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,25 @@ public void setClaimObject(String key, Object value, boolean overrideValue) {
202202
}
203203

204204
private void setClaimString(String key, Object value, boolean overrideValue) {
205-
Object currentValue = getClaim(key);
206-
if (overrideValue || currentValue == null) {
205+
if (overrideValue) {
207206
setClaim(key, (String) value);
208-
} else {
209-
setClaim(key, Lists.newArrayList(currentValue.toString(), (String) value));
207+
return;
208+
}
209+
210+
Object currentValue = getClaim(key);
211+
String valueAsString = (String) value;
212+
213+
if (currentValue instanceof String) {
214+
if (!currentValue.equals(value)) {
215+
setClaim(key, Lists.newArrayList(currentValue.toString(), valueAsString));
216+
} else {
217+
setClaim(key, (String) value);
218+
}
219+
} else if (currentValue instanceof List) {
220+
List<String> currentValueAsList = (List) currentValue;
221+
if (!currentValueAsList.contains(valueAsString)) {
222+
currentValueAsList.add(valueAsString);
223+
}
210224
}
211225
}
212226

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.jans.as.model.jwt;
2+
3+
import com.google.common.collect.Lists;
4+
import org.testng.annotations.Test;
5+
6+
import static org.testng.Assert.assertEquals;
7+
8+
/**
9+
* @author Yuriy Z
10+
*/
11+
public class JwtClaimsTest {
12+
13+
@Test
14+
public void setClaimObject_whenSetSameValue_shouldNotCreateDuplicate() {
15+
JwtClaims claims = new JwtClaims();
16+
claims.addAudience("client1");
17+
18+
claims.setClaimObject("aud", "client1", false);
19+
assertEquals(claims.getClaim("aud"), "client1");
20+
}
21+
22+
@Test
23+
public void setClaimObject_whenSetDifferentValues_shouldCreateCorrectArray() {
24+
JwtClaims claims = new JwtClaims();
25+
claims.addAudience("client1");
26+
27+
claims.setClaimObject("aud", "client2", false);
28+
assertEquals(claims.getClaim("aud"), Lists.newArrayList("client1", "client2"));
29+
}
30+
31+
@Test
32+
public void setClaimObject_whenSetDifferentValue_shouldCreateCorrectArray() {
33+
JwtClaims claims = new JwtClaims();
34+
claims.addAudience("client1");
35+
36+
claims.setClaimObject("aud", "client2", false);
37+
claims.setClaimObject("aud", "client3", false);
38+
assertEquals(claims.getClaim("aud"), Lists.newArrayList("client1", "client2", "client3"));
39+
}
40+
41+
@Test
42+
public void setClaimObject_whenSetDifferentValueWithOverride_shouldOverrideValue() {
43+
JwtClaims claims = new JwtClaims();
44+
claims.addAudience("client1");
45+
46+
claims.setClaimObject("aud", "client2", false);
47+
claims.setClaimObject("aud", "client3", true);
48+
assertEquals(claims.getClaim("aud"), "client3");
49+
}
50+
}

jans-auth-server/server/src/main/java/io/jans/as/server/introspection/ws/rs/IntrospectionWebService.java

+3
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ private String createResponseAsJwt(JSONObject response, AuthorizationGrant grant
250250
}
251251
}
252252
}
253+
if (log.isTraceEnabled()) {
254+
log.trace("Response before signing: {}", jwt.getClaims().toJsonString());
255+
}
253256

254257
return jwtSigner.sign().toString();
255258
}

0 commit comments

Comments
 (0)