This is an automated email from the ASF dual-hosted git repository.

more pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 8fd966f  KNOX-2608 - JWT tokens issues by Knox should have 'kid' and 
'jku' as part of JOSE Headers (#451)
8fd966f is described below

commit 8fd966f7fa2872701b79f6d9c48f7f234178b750
Author: Sandeep MorĂ© <[email protected]>
AuthorDate: Mon May 24 22:01:21 2021 -0400

    KNOX-2608 - JWT tokens issues by Knox should have 'kid' and 'jku' as part 
of JOSE Headers (#451)
    
    * KNOX-2608 - JWT tokens issues by Knox should have 'kid' and 'jku' as part 
of JOSE Headers
---
 .../services/security/token/impl/JWTToken.java     | 22 +++++++++++++++++++++-
 .../services/security/token/impl/JWTTokenTest.java | 13 ++++++++++---
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/impl/JWTToken.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/impl/JWTToken.java
index ceee909..2ab990d 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/impl/JWTToken.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/impl/JWTToken.java
@@ -16,6 +16,8 @@
  */
 package org.apache.knox.gateway.services.security.token.impl;
 
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.text.ParseException;
 import java.util.Date;
 import java.util.ArrayList;
@@ -66,7 +68,25 @@ public class JWTToken implements JWT {
   }
 
   public JWTToken(String alg, String[] claimsArray, List<String> audiences, 
boolean managed) {
-    JWSHeader header = new JWSHeader(new JWSAlgorithm(alg));
+    JWSHeader header = null;
+    try {
+      header = new JWSHeader(new JWSAlgorithm(alg),
+      null,
+      null,
+      null,
+      claimsArray[5] != null ? new URI(claimsArray[5]) : null, // JKU
+      null,
+      null,
+      null,
+      null,
+      null,
+      claimsArray[4] != null ? claimsArray[4] : null, // KID
+      null,
+      null);
+    } catch (URISyntaxException e) {
+      /* in event of bad URI exception fall back to using just algo in header 
*/
+      header = new JWSHeader(new JWSAlgorithm(alg));
+    }
 
     if(claimsArray == null || claimsArray.length < 6) {
       log.missingClaims(claimsArray.length);
diff --git 
a/gateway-spi/src/test/java/org/apache/knox/gateway/services/security/token/impl/JWTTokenTest.java
 
b/gateway-spi/src/test/java/org/apache/knox/gateway/services/security/token/impl/JWTTokenTest.java
index 9cb239d..24d3e71 100644
--- 
a/gateway-spi/src/test/java/org/apache/knox/gateway/services/security/token/impl/JWTTokenTest.java
+++ 
b/gateway-spi/src/test/java/org/apache/knox/gateway/services/security/token/impl/JWTTokenTest.java
@@ -69,18 +69,25 @@ public class JWTTokenTest {
 
   @Test
   public void testTokenCreation() throws Exception {
+    final String KID = "E0LDZulQ0XE_otJ5aoQtQu-RnXv8hU-M9U4dD7vDioA";
+    final String JKU = 
"https://localhost:8443/gateway/token/knoxtoken/api/v1/jwks.json";;
+    final String ALGO = "RS256";
     String[] claims = new String[6];
     claims[0] = "KNOXSSO";
     claims[1] = "[email protected]";
     claims[2] = "https://login.example.com";;
     claims[3] = Long.toString( ( System.currentTimeMillis()/1000 ) + 300);
-    claims[4] = "E0LDZulQ0XE_otJ5aoQtQu-RnXv8hU-M9U4dD7vDioA";
-    claims[5] = null;
-    JWT token = new JWTToken("RS256", claims);
+    claims[4] = KID;
+    claims[5] = JKU;
+    JWT token = new JWTToken(ALGO, claims);
 
     assertEquals("KNOXSSO", token.getIssuer());
     assertEquals("[email protected]", token.getSubject());
     assertEquals("https://login.example.com";, token.getAudience());
+
+    assertTrue("Missing KID claim in JWT header", 
token.getHeader().contains(KID));
+    assertTrue("Missing JKU claim in JWT header", 
token.getHeader().contains("jwks.json"));
+    assertTrue("Missing ALG claim in JWT header", 
token.getHeader().contains(ALGO));
   }
 
   @Test

Reply via email to