You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by ha...@apache.org on 2026/04/09 13:59:34 UTC

(knox) branch master updated: KNOX-3295: Set default type to JWT in issued knox token headers (#1195)

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

hanicz 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 fa75d218d KNOX-3295: Set default type to JWT in issued knox token headers (#1195)
fa75d218d is described below

commit fa75d218dc706b3f7f96c2567fa0c8a2a2a692ba
Author: hanicz <ha...@users.noreply.github.com>
AuthorDate: Thu Apr 9 15:59:28 2026 +0200

    KNOX-3295: Set default type to JWT in issued knox token headers (#1195)
    
    * KNOX-3295: Set default type to JWT in issued knox token headers
    
    * KNOX-3295: Simplify new unit tests
---
 .../gateway/service/knoxtoken/TokenResource.java   |  6 +++--
 .../knoxtoken/TokenServiceResourceTest.java        | 27 ++++++++++++++++++++++
 .../services/security/token/JWTokenAttributes.java |  1 +
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java b/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
index 082ad1ff8..8e6119b9c 100644
--- a/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
+++ b/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
@@ -121,7 +121,7 @@ public class TokenResource {
   protected static final String BEARER = "Bearer";
   private static final String TOKEN_PARAM_PREFIX = "knox.token.";
   protected static final String TOKEN_TTL_PARAM = TOKEN_PARAM_PREFIX + "ttl";
-  private static final String TOKEN_TYPE_PARAM = TOKEN_PARAM_PREFIX + "type";
+  public static final String TOKEN_TYPE_PARAM = TOKEN_PARAM_PREFIX + "type";
   private static final String TOKEN_AUDIENCES_PARAM = TOKEN_PARAM_PREFIX + "audiences";
   public static final String TOKEN_INCLUDE_GROUPS_IN_JWT_ALLOWED = TOKEN_PARAM_PREFIX + "include.groups.allowed";
   private static final String TOKEN_TARGET_URL = TOKEN_PARAM_PREFIX + "target.url";
@@ -272,7 +272,9 @@ public class TokenResource {
     this.tokenIssuer = StringUtils.isBlank(context.getInitParameter(KNOX_TOKEN_ISSUER))
             ? JWTokenAttributes.DEFAULT_ISSUER
             : context.getInitParameter(KNOX_TOKEN_ISSUER);
-    this.tokenType = context.getInitParameter(TOKEN_TYPE_PARAM);
+    this.tokenType = StringUtils.isBlank(context.getInitParameter(TOKEN_TYPE_PARAM))
+            ? JWTokenAttributes.DEFAULT_TYPE
+            : context.getInitParameter(TOKEN_TYPE_PARAM);
 
     tokenTTLAsText = getTokenTTLAsText();
 
diff --git a/gateway-service-knoxtoken/src/test/java/org/apache/knox/gateway/service/knoxtoken/TokenServiceResourceTest.java b/gateway-service-knoxtoken/src/test/java/org/apache/knox/gateway/service/knoxtoken/TokenServiceResourceTest.java
index 9687eed06..92f3a1323 100644
--- a/gateway-service-knoxtoken/src/test/java/org/apache/knox/gateway/service/knoxtoken/TokenServiceResourceTest.java
+++ b/gateway-service-knoxtoken/src/test/java/org/apache/knox/gateway/service/knoxtoken/TokenServiceResourceTest.java
@@ -307,6 +307,7 @@ public class TokenServiceResourceTest {
     // Verify the token
     JWT parsedToken = new JWTToken(accessToken);
     assertEquals("alice", parsedToken.getSubject());
+    assertTrue(parsedToken.getHeader().contains("\"typ\":\"JWT\""));
     assertTrue(authority.verifyToken(parsedToken));
   }
 
@@ -514,6 +515,32 @@ public class TokenServiceResourceTest {
     assertTrue(parsedToken.getHeader().contains("RS512"));
   }
 
+  @Test
+  public void testCustomTokenType() throws Exception {
+    final Map<String, String> contextExpectations = new HashMap<>();
+    contextExpectations.put(TokenResource.TOKEN_TYPE_PARAM, "custom-type");
+    configureCommonExpectations(contextExpectations);
+
+    TokenResource tr = new TokenResource();
+    tr.request = request;
+    tr.context = context;
+    tr.init();
+
+    // Issue a token
+    Response retResponse = tr.doGet();
+
+    assertEquals(200, retResponse.getStatus());
+
+    // Parse the response
+    String retString = retResponse.getEntity().toString();
+    String accessToken = getTagValue(retString, "access_token");
+    assertNotNull(accessToken);
+
+    // Verify the token
+    JWT parsedToken = new JWTToken(accessToken);
+    assertTrue(parsedToken.getHeader().contains("\"typ\":\"custom-type\""));
+  }
+
   @Test
   public void testDefaultTTL() throws Exception {
     final Map<String, String> contextExpectations = new HashMap<>();
diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/JWTokenAttributes.java b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/JWTokenAttributes.java
index 8d3e4f067..25c61f9a9 100644
--- a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/JWTokenAttributes.java
+++ b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/token/JWTokenAttributes.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 public class JWTokenAttributes {
   public static final String DEFAULT_ISSUER = "KNOXSSO";
+  public static final String DEFAULT_TYPE = "JWT";
   private final String userName;
   private final List<String> audiences;
   private final String algorithm;