Skip to content

Commit cf0a824

Browse files
authored
feat(jans-auth-server): provided convenient method to add claim to AT as JWT in modifyAccessToken() method #3579 (#3629)
1 parent 8d4783b commit cf0a824

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

jans-auth-server/server/src/main/java/io/jans/as/server/model/common/AuthorizationGrant.java

+14-8
Original file line numberDiff line numberDiff line change
@@ -191,16 +191,26 @@ public AccessToken createAccessToken(ExecutionContext context) {
191191
log.trace("Failed to create access token with negative expiration time");
192192
return null;
193193
}
194+
195+
JwtSigner jwtSigner = null;
194196
if (getClient().isAccessTokenAsJwt()) {
195-
accessToken.setCode(createAccessTokenAsJwt(accessToken, context));
197+
jwtSigner = createAccessTokenAsJwt(accessToken, context);
196198
}
197199

198-
boolean externalOk = externalUpdateTokenService.modifyAccessToken(accessToken, ExternalUpdateTokenContext.of(context));
200+
boolean externalOk = externalUpdateTokenService.modifyAccessToken(accessToken, ExternalUpdateTokenContext.of(context, jwtSigner));
199201
if (!externalOk) {
200202
log.trace("External script forbids access token creation.");
201203
return null;
202204
}
203205

206+
if (getClient().isAccessTokenAsJwt() && jwtSigner != null) {
207+
final String accessTokenCode = jwtSigner.sign().toString();
208+
if (log.isTraceEnabled())
209+
log.trace("Created access token JWT: {}", accessTokenCode + ", claims: " + jwtSigner.getJwt().getClaims().toJsonString());
210+
211+
accessToken.setCode(accessTokenCode);
212+
}
213+
204214
final TokenEntity tokenEntity = asToken(accessToken);
205215
context.setAccessTokenEntity(tokenEntity);
206216

@@ -218,7 +228,7 @@ public AccessToken createAccessToken(ExecutionContext context) {
218228
}
219229
}
220230

221-
public String createAccessTokenAsJwt(AccessToken accessToken, ExecutionContext context) throws Exception {
231+
public JwtSigner createAccessTokenAsJwt(AccessToken accessToken, ExecutionContext context) throws Exception {
222232
final User user = getUser();
223233
final Client client = getClient();
224234

@@ -257,11 +267,7 @@ public String createAccessTokenAsJwt(AccessToken accessToken, ExecutionContext c
257267
runIntrospectionScriptAndInjectValuesIntoJwt(jwt, context);
258268
}
259269

260-
final String accessTokenCode = jwtSigner.sign().toString();
261-
if (log.isTraceEnabled())
262-
log.trace("Created access token JWT: {}", accessTokenCode + ", claims: " + jwt.getClaims().toJsonString());
263-
264-
return accessTokenCode;
270+
return jwtSigner;
265271
}
266272

267273
private void runIntrospectionScriptAndInjectValuesIntoJwt(Jwt jwt, ExecutionContext executionContext) {

jans-auth-server/server/src/main/java/io/jans/as/server/service/external/context/ExternalUpdateTokenContext.java

+30-9
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,20 @@
66

77
package io.jans.as.server.service.external.context;
88

9+
import com.google.common.collect.Lists;
910
import io.jans.as.common.model.registration.Client;
1011
import io.jans.as.common.service.AttributeService;
1112
import io.jans.as.model.common.GrantType;
1213
import io.jans.as.model.configuration.AppConfiguration;
1314
import io.jans.as.model.jwt.Jwt;
15+
import io.jans.as.model.jwt.JwtClaims;
1416
import io.jans.as.server.model.common.AccessToken;
1517
import io.jans.as.server.model.common.AuthorizationGrant;
1618
import io.jans.as.server.model.common.ExecutionContext;
19+
import io.jans.as.server.model.token.JwtSigner;
1720
import io.jans.model.custom.script.conf.CustomScriptConfiguration;
18-
import org.jetbrains.annotations.Nullable;
19-
2021
import jakarta.servlet.http.HttpServletRequest;
22+
import org.jetbrains.annotations.Nullable;
2123
import org.slf4j.Logger;
2224
import org.slf4j.LoggerFactory;
2325

@@ -39,6 +41,7 @@ public class ExternalUpdateTokenContext extends ExternalScriptContext {
3941
private CustomScriptConfiguration script;
4042
@Nullable
4143
private ExecutionContext executionContext;
44+
private JwtSigner jwtSigner;
4245

4346
public ExternalUpdateTokenContext(HttpServletRequest httpRequest, AuthorizationGrant grant,
4447
Client client, AppConfiguration appConfiguration, AttributeService attributeService) {
@@ -50,8 +53,13 @@ public ExternalUpdateTokenContext(HttpServletRequest httpRequest, AuthorizationG
5053
}
5154

5255
public static ExternalUpdateTokenContext of(ExecutionContext executionContext) {
56+
return of(executionContext, null);
57+
}
58+
59+
public static ExternalUpdateTokenContext of(ExecutionContext executionContext, JwtSigner jwtSigner) {
5360
ExternalUpdateTokenContext context = new ExternalUpdateTokenContext(executionContext.getHttpRequest(), executionContext.getGrant(), executionContext.getClient(), executionContext.getAppConfiguration(), executionContext.getAttributeService());
5461
context.setExecutionContext(executionContext);
62+
context.setJwtSigner(jwtSigner);
5563
return context;
5664
}
5765

@@ -72,6 +80,23 @@ private ExecutionContext createExecutionContext() {
7280
return result;
7381
}
7482

83+
public JwtClaims getClaims() {
84+
Jwt jwt = getJwt();
85+
return jwt != null ? jwt.getClaims() : null;
86+
}
87+
88+
public Jwt getJwt() {
89+
return jwtSigner != null ? jwtSigner.getJwt() : null;
90+
}
91+
92+
public JwtSigner getJwtSigner() {
93+
return jwtSigner;
94+
}
95+
96+
public void setJwtSigner(JwtSigner jwtSigner) {
97+
this.jwtSigner = jwtSigner;
98+
}
99+
75100
public CustomScriptConfiguration getScript() {
76101
return script;
77102
}
@@ -117,13 +142,9 @@ public void overwriteAccessTokenScopes(AccessToken accessToken, Set<String> newS
117142

118143
grant.setScopes(newScopes);
119144

120-
// re-generate access token jwt to put new scopes into jwt
121-
if (isValidJwt(accessToken.getCode())) {
122-
try {
123-
accessToken.setCode(grant.createAccessTokenAsJwt(accessToken, executionContext));
124-
} catch (Exception e) {
125-
log.error("Failed to generate access token jwt", e);
126-
}
145+
final Jwt jwt = getJwt();
146+
if (jwt != null) {
147+
jwt.getClaims().setClaim("scope", Lists.newArrayList(newScopes));
127148
}
128149
}
129150

0 commit comments

Comments
 (0)