Skip to content

Commit 9ced4f4

Browse files
committed
fix JWT validation logic.
1 parent 2abccc6 commit 9ced4f4

File tree

2 files changed

+34
-34
lines changed

2 files changed

+34
-34
lines changed

components/apimgt/org.wso2.carbon.apimgt.gateway/src/main/java/org/wso2/carbon/apimgt/gateway/APIMgtGatewayConstants.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ public class APIMgtGatewayConstants {
191191
//This will be a reserved name for the synapse message context properties.
192192
public static final String ADDITIONAL_ANALYTICS_PROPS = "ADDITIONAL_ANALYTICS_PROPS_TO_PUBLISH";
193193

194-
public static final String CLIENT_ID = "client_id";
194+
public static final String AZP_JWT_CLAIM = "azp";
195+
public static final String ENTITY_ID_JWT_CLAIM = "entity_id";
195196
}
196197

components/apimgt/org.wso2.carbon.apimgt.gateway/src/main/java/org/wso2/carbon/apimgt/gateway/handlers/security/jwt/JWTValidator.java

+32-33
Original file line numberDiff line numberDiff line change
@@ -185,43 +185,42 @@ public AuthenticationContext authenticate(SignedJWTInfo signedJWTInfo, MessageCo
185185
"Invalid JWT token");
186186
}
187187
}
188-
if (jwtGeneratedTime != 0 && RevokedJWTDataHolder.getInstance()
189-
.isRevokedConsumerKeyExists((String) signedJWTInfo.getJwtClaimsSet()
190-
.getClaim(APIMgtGatewayConstants.CLIENT_ID), jwtGeneratedTime)) {
191-
if (log.isDebugEnabled()) {
192-
log.debug("Consumer key retrieved from the jwt token map is in revoked consumer key map." +
193-
" Token: " + GatewayUtils.getMaskedToken(jwtHeader));
188+
Object authorizedPartyClaim = signedJWTInfo.getJwtClaimsSet().getClaim(APIMgtGatewayConstants.AZP_JWT_CLAIM);
189+
Object entityIdClaim = signedJWTInfo.getJwtClaimsSet().getClaim(APIMgtGatewayConstants.ENTITY_ID_JWT_CLAIM);
190+
if (jwtGeneratedTime != 0 && authorizedPartyClaim != null && entityIdClaim != null) {
191+
String authorizedParty = (String) authorizedPartyClaim;
192+
String entityId = (String) entityIdClaim;
193+
if (RevokedJWTDataHolder.getInstance().isRevokedConsumerKeyExists(authorizedParty, jwtGeneratedTime)) {
194+
if (log.isDebugEnabled()) {
195+
log.debug("Consumer key retrieved from the jwt token map is in revoked consumer key map."
196+
+ " Token: " + GatewayUtils.getMaskedToken(jwtHeader));
197+
}
198+
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
199+
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS,
200+
"Invalid JWT token");
194201
}
195-
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
196-
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS,
197-
"Invalid JWT token");
198-
}
199-
if (jwtGeneratedTime != 0 && signedJWTInfo.getJwtClaimsSet().getSubject()
200-
.equals(signedJWTInfo.getJwtClaimsSet().getClaim(APIMgtGatewayConstants.CLIENT_ID))
201-
&& RevokedJWTDataHolder.getInstance().isRevokedSubjectEntityConsumerAppExists(
202-
signedJWTInfo.getJwtClaimsSet().getSubject(), jwtGeneratedTime)) {
203-
// handle user event revocations of app tokens since the 'sub' claim is client id
204-
if (log.isDebugEnabled()) {
205-
log.debug("Consumer key retrieved from the jwt token map is in revoked consumer key map." +
206-
" Token: " + GatewayUtils.getMaskedToken(jwtHeader));
202+
if (StringUtils.equals(entityId, authorizedParty)
203+
&& RevokedJWTDataHolder.getInstance().isRevokedSubjectEntityConsumerAppExists(
204+
entityId, jwtGeneratedTime)) {
205+
// handle user event revocations of app tokens since the 'sub' claim is client id
206+
if (log.isDebugEnabled()) {
207+
log.debug("Consumer key retrieved from the jwt token map is in revoked consumer key map."
208+
+ " Token: " + GatewayUtils.getMaskedToken(jwtHeader));
209+
}
210+
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
211+
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS, "Invalid JWT token");
207212
}
208-
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
209-
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS,
210-
"Invalid JWT token");
211-
}
212-
if (jwtGeneratedTime != 0 && !signedJWTInfo.getJwtClaimsSet().getSubject()
213-
.equals(signedJWTInfo.getJwtClaimsSet().getClaim(APIMgtGatewayConstants.CLIENT_ID))
214-
&& RevokedJWTDataHolder.getInstance().isRevokedSubjectEntityUserExists(
215-
signedJWTInfo.getJwtClaimsSet().getSubject(), jwtGeneratedTime)) {
216-
if (log.isDebugEnabled()) {
217-
log.debug("User id retrieved from the jwt token map is in revoked user id map." +
218-
" Token: " + GatewayUtils.getMaskedToken(jwtHeader));
213+
if (!StringUtils.equals(entityId, authorizedParty) && RevokedJWTDataHolder.getInstance()
214+
.isRevokedSubjectEntityUserExists(entityId, jwtGeneratedTime)) {
215+
if (log.isDebugEnabled()) {
216+
log.debug("User id retrieved from the jwt token map is in revoked user id map."
217+
+ " Token: " + GatewayUtils.getMaskedToken(jwtHeader));
218+
}
219+
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
220+
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS,
221+
"Invalid JWT token");
219222
}
220-
log.error("Invalid JWT token. " + GatewayUtils.getMaskedToken(jwtHeader));
221-
throw new APISecurityException(APISecurityConstants.API_AUTH_INVALID_CREDENTIALS,
222-
"Invalid JWT token");
223223
}
224-
225224
JWTValidationInfo jwtValidationInfo = getJwtValidationInfo(signedJWTInfo, jwtTokenIdentifier);
226225

227226
if (jwtValidationInfo != null) {

0 commit comments

Comments
 (0)