Skip to content

Commit ae0c324

Browse files
feat: Update io.jsonwebtoken:jjwt dependencies. (#39)
* feat: Update `io.jsonwebtoken:jjwt` dependencies. * revert local version.
1 parent 34a6eb5 commit ae0c324

File tree

2 files changed

+51
-35
lines changed

2 files changed

+51
-35
lines changed

build.gradle

+8-6
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ plugins {
55
}
66

77
sourceCompatibility = 1.11
8+
89
def baseVersion = '3.9.4'
910
def baseGroupId = 'io.github.adempiere'
10-
def grpcVersion = '1.62.2'
11+
def grpcVersion = '1.65.1'
12+
def protobufVersion = '3.25.4'
1113

1214
repositories {
1315
mavenLocal()
@@ -28,11 +30,11 @@ dependencies {
2830
]
2931
)
3032
api "io.grpc:grpc-netty-shaded:${grpcVersion}"
31-
api 'com.google.protobuf:protobuf-java:3.25.3'
32-
api 'com.google.protobuf:protobuf-java-util:3.25.3'
33-
api 'io.jsonwebtoken:jjwt-api:0.11.2'
34-
api 'io.jsonwebtoken:jjwt-impl:0.11.2'
35-
api 'io.jsonwebtoken:jjwt-jackson:0.11.2'
33+
api "com.google.protobuf:protobuf-java:${protobufVersion}"
34+
api "com.google.protobuf:protobuf-java-util:${protobufVersion}"
35+
api "io.jsonwebtoken:jjwt-api:0.12.6"
36+
api "io.jsonwebtoken:jjwt-impl:0.12.6"
37+
api "io.jsonwebtoken:jjwt-jackson:0.12.6"
3638

3739
// ADempiere Core
3840
api "${baseGroupId}:base:${baseVersion}"

src/main/java/org/spin/service/grpc/authentication/SessionManager.java

+43-29
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
*************************************************************************************/
1616
package org.spin.service.grpc.authentication;
1717

18-
import java.security.Key;
1918
import java.sql.PreparedStatement;
2019
import java.sql.ResultSet;
2120
import java.sql.SQLException;
2221
import java.sql.Timestamp;
22+
import java.util.Base64;
2323
import java.util.Collections;
2424
import java.util.Date;
2525
import java.util.Hashtable;
@@ -28,6 +28,8 @@
2828
import java.util.Properties;
2929
import java.util.logging.Level;
3030

31+
import javax.crypto.SecretKey;
32+
3133
import org.adempiere.core.domains.models.I_AD_Language;
3234
import org.adempiere.core.domains.models.I_AD_Session;
3335
import org.adempiere.core.domains.models.I_AD_User_Authentication;
@@ -64,10 +66,9 @@
6466

6567
import io.jsonwebtoken.Claims;
6668
import io.jsonwebtoken.Jws;
69+
import io.jsonwebtoken.JwtBuilder;
6770
import io.jsonwebtoken.JwtParser;
6871
import io.jsonwebtoken.Jwts;
69-
import io.jsonwebtoken.SignatureAlgorithm;
70-
import io.jsonwebtoken.io.Decoders;
7172
import io.jsonwebtoken.security.Keys;
7273

7374
/**
@@ -151,15 +152,15 @@ public static String getDefaultLanguage(String language) {
151152
return defaultLanguage;
152153
}
153154

154-
public static void loadValuesWithClaims(Claims claimsBody) {
155-
if (claimsBody == null || claimsBody.isEmpty()) {
155+
public static void loadValuesWithClaims(Claims claimsPayload) {
156+
if (claimsPayload == null || claimsPayload.isEmpty()) {
156157
throw new AdempiereException("Claims.Body @NotFound@");
157158
}
158-
SessionManager.userId = claimsBody.get("AD_User_ID", Integer.class);
159-
SessionManager.roleId = claimsBody.get("AD_Role_ID", Integer.class);
160-
SessionManager.organizationId = claimsBody.get("AD_Org_ID", Integer.class);
161-
SessionManager.warehouseId = claimsBody.get("M_Warehouse_ID", Integer.class);
162-
SessionManager.language = claimsBody.get("AD_Language", String.class);
159+
SessionManager.userId = claimsPayload.get("AD_User_ID", Integer.class);
160+
SessionManager.roleId = claimsPayload.get("AD_Role_ID", Integer.class);
161+
SessionManager.organizationId = claimsPayload.get("AD_Org_ID", Integer.class);
162+
SessionManager.warehouseId = claimsPayload.get("M_Warehouse_ID", Integer.class);
163+
SessionManager.language = claimsPayload.get("AD_Language", String.class);
163164
}
164165

165166
public static void loadValuesWithMADToken(MADToken token) {
@@ -226,16 +227,20 @@ public static Properties getSessionFromToken(String tokenValue) {
226227
boolean isNewSession = false;
227228
int sessionId = getSessionIdByOpenID(tokenValue);
228229
if (sessionId <= 0) {
230+
SecretKey secretKey = getJWT_SecretKey();
229231
// Validate if is token based
230-
JwtParser parser = Jwts.parserBuilder().setSigningKey(
231-
getJWT_SecretKey()
232-
).build();
233-
Jws<Claims> claims = parser.parseClaimsJws(tokenValue);
232+
JwtParser parser = Jwts.parser()
233+
.verifyWith(secretKey)
234+
.build()
235+
;
236+
Jws<Claims> claims = parser.parseSignedClaims(tokenValue);
234237
sessionId = NumberManager.getIntFromString(
235-
claims.getBody().getId()
238+
claims.getPayload().getId()
236239
);
237240
if (sessionId > 0) {
238-
loadValuesWithClaims(claims.getBody());
241+
loadValuesWithClaims(
242+
claims.getPayload()
243+
);
239244
} else {
240245
MADToken token = createSessionFromToken(tokenValue);
241246
if(Optional.ofNullable(token).isPresent()) {
@@ -389,7 +394,7 @@ public static String getOpenIDToken(MSession session) {
389394
* Get JWT Secrect Key generates with HMAC-SHA algorithms
390395
* @return
391396
*/
392-
private static String getJWT_SecretKey() {
397+
private static String getJWT_SecretKeyAsString() {
393398
// get by SysConfig client
394399
String secretKey = MSysConfig.getValue(
395400
JWTUtil.ECA52_JWT_SECRET_KEY,
@@ -410,6 +415,14 @@ private static String getJWT_SecretKey() {
410415
}
411416
return secretKey;
412417
}
418+
private static SecretKey getJWT_SecretKey() {
419+
byte[] keyBytes = Base64.getDecoder().decode(
420+
getJWT_SecretKeyAsString()
421+
);
422+
SecretKey secretKey = Keys.hmacShaKeyFor(keyBytes);
423+
return secretKey;
424+
}
425+
413426

414427
/**
415428
* Create token as bearer
@@ -422,27 +435,28 @@ private static String createAndGetBearerToken(MSession session, int warehouseId,
422435
MUser user = MUser.get(session.getCtx(), session.getCreatedBy());
423436
long sessionTimeout = getSessionTimeout(user);
424437

425-
byte[] keyBytes = Decoders.BASE64.decode(
426-
getJWT_SecretKey()
427-
);
428-
Key key = Keys.hmacShaKeyFor(keyBytes);
429-
return Jwts.builder()
430-
.setId(String.valueOf(session.getAD_Session_ID()))
438+
SecretKey secretKey = getJWT_SecretKey();
439+
JwtBuilder jwtBuilder = Jwts.builder()
440+
.id(String.valueOf(session.getAD_Session_ID()))
441+
// .claims()
431442
.claim("AD_Client_ID", session.getAD_Client_ID())
432443
.claim("AD_Org_ID", session.getAD_Org_ID())
433444
.claim("AD_Role_ID", session.getAD_Role_ID())
434445
.claim("AD_User_ID", session.getCreatedBy())
435446
.claim("M_Warehouse_ID", warehouseId)
436447
.claim("AD_Language", language)
437-
.setIssuedAt(
438-
new Date(System.currentTimeMillis())
448+
.issuedAt(
449+
new Date()
439450
)
440-
.setExpiration(
441-
new Date(System.currentTimeMillis() + sessionTimeout)
451+
.expiration(
452+
new Date(
453+
System.currentTimeMillis() + sessionTimeout
454+
)
442455
)
443-
.signWith(key, SignatureAlgorithm.HS256)
444-
.compact()
456+
.signWith(secretKey, Jwts.SIG.HS256)
445457
;
458+
459+
return jwtBuilder.compact();
446460
}
447461

448462
/**

0 commit comments

Comments
 (0)