Skip to content

Commit b00cbad

Browse files
author
bhathiya
committed
1 parent b5ba36e commit b00cbad

File tree

4 files changed

+70
-32
lines changed

4 files changed

+70
-32
lines changed

components/apimgt/org.wso2.carbon.apimgt.keymgt/src/main/java/org/wso2/carbon/apimgt/keymgt/issuers/APIMTokenIssuer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.wso2.carbon.apimgt.keymgt.token.APIMJWTGenerator;
4040
import org.wso2.carbon.apimgt.keymgt.token.TokenGenerator;
4141
import org.wso2.carbon.apimgt.keymgt.util.APIKeyMgtDataHolder;
42-
import org.wso2.carbon.apimgt.keymgt.util.APIMTokenIssuerUtil;
4342
import org.wso2.carbon.identity.base.IdentityConstants;
4443
import org.wso2.carbon.identity.core.util.IdentityUtil;
4544
import org.wso2.carbon.identity.oauth.common.exception.InvalidOAuthClientException;
@@ -114,13 +113,17 @@ public String accessToken(OAuthTokenReqMessageContext tokReqMsgCtx) throws OAuth
114113
if (jwtGenerator != null) {
115114
TokenValidationContext validationContext = new TokenValidationContext();
116115
APIKeyValidationInfoDTO apiKeyValidationInfoDTO = new APIKeyValidationInfoDTO();
117-
apiKeyValidationInfoDTO.setEndUserName(tokReqMsgCtx.getAuthorizedUser().toFullQualifiedUsername());
116+
apiKeyValidationInfoDTO.setEndUserName(tokReqMsgCtx.getAuthorizedUser()
117+
.toFullQualifiedUsername());
118118
apiKeyValidationInfoDTO.setSubscriber(application.getOwner());
119119
apiKeyValidationInfoDTO.setApplicationName(application.getName());
120120
apiKeyValidationInfoDTO.setApplicationId(String.valueOf(application.getId()));
121121
apiKeyValidationInfoDTO.setType(application.getKeyType());
122122
apiKeyValidationInfoDTO.setApplicationTier(application.getTier());
123123
validationContext.setValidationInfoDTO(apiKeyValidationInfoDTO);
124+
validationContext.setUser(tokReqMsgCtx.getAuthorizedUser());
125+
validationContext.setAuthorizationCode(tokReqMsgCtx.getOauth2AccessTokenReqDTO()
126+
.getAuthorizationCode());
124127
jwtTokenInfoDTO.setBackendJwt(jwtGenerator.generateToken(validationContext));
125128
}
126129
}

components/apimgt/org.wso2.carbon.apimgt.keymgt/src/main/java/org/wso2/carbon/apimgt/keymgt/service/TokenValidationContext.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.wso2.carbon.apimgt.api.model.AccessTokenInfo;
2424
import org.wso2.carbon.apimgt.impl.dto.APIKeyValidationInfoDTO;
25+
import org.wso2.carbon.identity.application.authentication.framework.model.AuthenticatedUser;
2526

2627
import java.util.HashMap;
2728
import java.util.Map;
@@ -43,6 +44,8 @@ public class TokenValidationContext {
4344
private APIKeyValidationInfoDTO validationInfoDTO;
4445
private boolean isCacheHit;
4546
private AccessTokenInfo tokenInfo;
47+
private AuthenticatedUser user;
48+
private String authorizationCode;
4649

4750
public AccessTokenInfo getTokenInfo() {
4851
return tokenInfo;
@@ -140,4 +143,19 @@ public Object getAttribute(String key){
140143
return this.attributeMap.get(key);
141144
}
142145

146+
public AuthenticatedUser getUser() {
147+
return user;
148+
}
149+
150+
public void setUser(AuthenticatedUser user) {
151+
this.user = user;
152+
}
153+
154+
public String getAuthorizationCode() {
155+
return authorizationCode;
156+
}
157+
158+
public void setAuthorizationCode(String authorizationCode) {
159+
this.authorizationCode = authorizationCode;
160+
}
143161
}

components/apimgt/org.wso2.carbon.apimgt.keymgt/src/main/java/org/wso2/carbon/apimgt/keymgt/token/JWTGenerator.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import org.apache.commons.logging.Log;
2323
import org.apache.commons.logging.LogFactory;
24-
2524
import org.wso2.carbon.apimgt.api.APIManagementException;
25+
import org.wso2.carbon.apimgt.api.model.Application;
2626
import org.wso2.carbon.apimgt.impl.internal.ServiceReferenceHolder;
2727
import org.wso2.carbon.apimgt.impl.token.ClaimsRetriever;
2828
import org.wso2.carbon.apimgt.impl.utils.APIUtil;
29-
import org.wso2.carbon.apimgt.api.model.Application;
3029
import org.wso2.carbon.apimgt.keymgt.MethodStats;
3130
import org.wso2.carbon.apimgt.keymgt.service.TokenValidationContext;
3231
import org.wso2.carbon.identity.application.common.model.ClaimMapping;
@@ -37,7 +36,9 @@
3736
import org.wso2.carbon.user.api.UserStoreManager;
3837
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
3938

40-
import java.util.*;
39+
import java.util.HashMap;
40+
import java.util.LinkedHashMap;
41+
import java.util.Map;
4142

4243
import static org.apache.commons.collections.MapUtils.isNotEmpty;
4344

@@ -113,11 +114,31 @@ public Map<String, String> populateCustomClaims(TokenValidationContext validatio
113114
throws APIManagementException {
114115
ClaimsRetriever claimsRetriever = getClaimsRetriever();
115116
if (claimsRetriever != null) {
117+
Map<ClaimMapping, String> customClaimsWithMapping;
118+
Map<String, String> customClaims;
116119
//fix for https://github.com/wso2/product-apim/issues/4112
117120
String accessToken = validationContext.getAccessToken();
118-
AuthorizationGrantCacheKey cacheKey = new AuthorizationGrantCacheKey(accessToken);
121+
String authCode = validationContext.getAuthorizationCode();
122+
if (accessToken != null) {
123+
AuthorizationGrantCacheEntry cacheEntry = AuthorizationGrantCache.getInstance()
124+
.getValueFromCacheByToken(new AuthorizationGrantCacheKey(accessToken));
125+
if (cacheEntry == null) {
126+
return new HashMap<>();
127+
}
128+
customClaimsWithMapping = cacheEntry.getUserAttributes();
129+
} else if (authCode != null) {
130+
AuthorizationGrantCacheEntry cacheEntry = AuthorizationGrantCache.getInstance()
131+
.getValueFromCacheByCode(new AuthorizationGrantCacheKey(authCode));
132+
if (cacheEntry == null) {
133+
return new HashMap<>();
134+
}
135+
customClaimsWithMapping = cacheEntry.getUserAttributes();
136+
} else {
137+
customClaimsWithMapping = validationContext.getUser().getUserAttributes();
138+
}
139+
140+
customClaims = convertClaimMap(customClaimsWithMapping);
119141

120-
Map<String, String> customClaims = getClaimsFromCache(cacheKey);
121142
if (isNotEmpty(customClaims)) {
122143
if (log.isDebugEnabled()) {
123144
log.debug("The custom claims are retrieved from AuthorizationGrantCache for user : " +
@@ -163,16 +184,12 @@ public Map<String, String> populateCustomClaims(TokenValidationContext validatio
163184
}
164185
return null;
165186
}
166-
protected Map<String, String> getClaimsFromCache(AuthorizationGrantCacheKey cacheKey) {
167187

168-
AuthorizationGrantCacheEntry cacheEntry = AuthorizationGrantCache.getInstance().getValueFromCacheByToken(cacheKey);
169-
if (cacheEntry == null) {
170-
return new HashMap<String, String>();
171-
}
172-
Map<ClaimMapping, String> userAttributes = cacheEntry.getUserAttributes();
173-
Map<String, String> userClaims = new HashMap<String, String>();
188+
protected Map<String, String> convertClaimMap(Map<ClaimMapping, String> userAttributes) {
189+
190+
Map<String, String> userClaims = new HashMap<>();
174191
for (Map.Entry<ClaimMapping, String> entry : userAttributes.entrySet()) {
175-
userClaims.put(entry.getKey().getRemoteClaim().getClaimUri(), entry.getValue());
192+
userClaims.put(entry.getKey().getLocalClaim().getClaimUri(), entry.getValue());
176193
}
177194
return userClaims;
178195
}

components/apimgt/org.wso2.carbon.apimgt.keymgt/src/test/java/org/wso2/carbon/apimgt/keymgt/token/TokenGenTest.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,36 @@
1616

1717
package org.wso2.carbon.apimgt.keymgt.token;
1818

19-
import java.io.FileInputStream;
20-
import java.io.InputStream;
21-
import java.security.KeyStore;
22-
import java.security.MessageDigest;
23-
import java.security.cert.Certificate;
24-
import java.security.cert.X509Certificate;
19+
import org.apache.axiom.util.base64.Base64Utils;
20+
import org.apache.commons.logging.Log;
21+
import org.apache.commons.logging.LogFactory;
2522
import org.junit.Assert;
23+
import org.junit.Before;
2624
import org.junit.Ignore;
25+
import org.junit.Test;
2726
import org.junit.runner.RunWith;
2827
import org.mockito.Mockito;
2928
import org.powermock.api.mockito.PowerMockito;
3029
import org.powermock.core.classloader.annotations.PrepareForTest;
3130
import org.powermock.modules.junit4.PowerMockRunner;
32-
import org.apache.axiom.util.base64.Base64Utils;
33-
import org.apache.commons.logging.Log;
34-
import org.apache.commons.logging.LogFactory;
35-
import org.junit.Before;
36-
import org.junit.Test;
3731
import org.wso2.carbon.apimgt.impl.APIConstants;
3832
import org.wso2.carbon.apimgt.impl.APIManagerConfiguration;
3933
import org.wso2.carbon.apimgt.impl.APIManagerConfigurationServiceImpl;
4034
import org.wso2.carbon.apimgt.impl.dto.APIKeyValidationInfoDTO;
4135
import org.wso2.carbon.apimgt.impl.internal.ServiceReferenceHolder;
4236
import org.wso2.carbon.apimgt.impl.utils.APIUtil;
4337
import org.wso2.carbon.apimgt.keymgt.service.TokenValidationContext;
44-
import org.wso2.carbon.identity.oauth.cache.AuthorizationGrantCacheKey;
38+
import org.wso2.carbon.core.util.KeyStoreManager;
39+
import org.wso2.carbon.identity.application.common.model.ClaimMapping;
4540

41+
import java.io.FileInputStream;
42+
import java.io.InputStream;
43+
import java.security.KeyStore;
44+
import java.security.MessageDigest;
45+
import java.security.cert.Certificate;
46+
import java.security.cert.X509Certificate;
4647
import java.util.HashMap;
4748
import java.util.Map;
48-
import org.wso2.carbon.core.util.KeyStoreManager;
4949
//import org.wso2.carbon.apimgt.impl.utils.TokenGenUtil;
5050

5151
@RunWith(PowerMockRunner.class)
@@ -66,8 +66,8 @@ public void setUp() throws Exception {
6666
public void testAbstractJWTGenerator() throws Exception {
6767
JWTGenerator jwtGen = new JWTGenerator() {
6868
@Override
69-
protected Map<String, String> getClaimsFromCache(AuthorizationGrantCacheKey cacheKey) {
70-
return new HashMap<String, String>();
69+
protected Map<String, String> convertClaimMap(Map<ClaimMapping, String> userAttributes) {
70+
return new HashMap<>();
7171
}
7272
};
7373
APIKeyValidationInfoDTO dto=new APIKeyValidationInfoDTO();
@@ -127,8 +127,8 @@ protected Map<String, String> getClaimsFromCache(AuthorizationGrantCacheKey cach
127127
public void testJWTGeneration() throws Exception {
128128
JWTGenerator jwtGen = new JWTGenerator() {
129129
@Override
130-
public Map<String, String> getClaimsFromCache(AuthorizationGrantCacheKey cacheKey) {
131-
return new HashMap<String, String>();
130+
public Map<String, String> convertClaimMap(Map<ClaimMapping, String> userAttributes) {
131+
return new HashMap<>();
132132
}
133133
};
134134
APIKeyValidationInfoDTO dto=new APIKeyValidationInfoDTO();

0 commit comments

Comments
 (0)