smolnar82 commented on code in PR #876:
URL: https://github.com/apache/knox/pull/876#discussion_r1519517586


##########
gateway-provider-security-jwt/src/main/java/org/apache/knox/gateway/provider/federation/jwt/filter/JWTFederationFilter.java:
##########
@@ -238,10 +241,33 @@ public Pair<TokenType, String> getWireToken(final 
ServletRequest request) {
           }
       }
 
+      /*
+      POST /{tenant}/oauth2/v2.0/token HTTP/1.1
+      Host: login.microsoftonline.com:443
+      Content-Type: application/x-www-form-urlencoded
+
+      client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
+      &scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
+      &client_secret=sampleCredentials
+      &grant_type=client_credentials
+       */
+
+      // Let's check whether this is a client credentials oauth request or 
whether
+      // the token has been configured for another usecase specific header
       if (parsed == null) {
-          token = request.getParameter(this.paramName);
-          if (token != null) {
-            parsed = Pair.of(TokenType.JWT, token);
+          String grantType = request.getParameter(GRANT_TYPE);
+          if (CLIENT_CREDENTIALS.equals(grantType)) {
+            // this is indeed a client credentials flow client_id and
+            // client_secret are expected now the client_id will be in
+            // the token as the token_id so we will get that later
+            token = request.getParameter(CLIENT_SECRET);
+            parsed = Pair.of(TokenType.Passcode, token);
+          }

Review Comment:
   I think this code - along with the above comment that explains the different 
query parameters in a client credentials flow request - deserves to be in a 
private method and can be added before the original `parsed == null` check. 
This way it's easier to read, IMO.
   
   For instance:
   ```
   // Let's check whether this is a client credentials oauth request
   parsed = parsed == null ? parseOauthRequestClientCredentials(request) : 
parsed;
   
   // Finally, whether the token has been configured for another usecase 
specific header
   if (parsed == null) {
      ...
   
   ```



##########
gateway-provider-security-jwt/src/main/java/org/apache/knox/gateway/provider/federation/jwt/filter/AbstractJWTFilter.java:
##########
@@ -300,8 +302,23 @@ protected Subject createSubjectFromToken(final JWT token) 
throws UnknownTokenExc
 
   public Subject createSubjectFromTokenIdentifier(final String tokenId) throws 
UnknownTokenException {
     TokenMetadata metadata = tokenStateService.getTokenMetadata(tokenId);
+    String username = null;
     if (metadata != null) {
-      return createSubjectFromTokenData(metadata.getUserName(), null);
+      String type =  metadata.getMetadata(TYPE);

Review Comment:
   As you indicated in the PR's description,
   > This change introduces only the acceptance of the Knox TokenID and 
Passcode tokens as CLIENT_ID and CLIENT_SECRET in a standard OAuth 2.0 client 
credentials flow request body
   
   Based on this, I've to ask if there is going to be a separate PR where the 
`type` metadata is created when OAuth clients get a new token (and replay the 
`tokenId` and `passcode` fields as `CLIENT_ID` and `CLIENT_SECRET`)?



##########
gateway-provider-security-jwt/src/main/java/org/apache/knox/gateway/provider/federation/jwt/filter/AbstractJWTFilter.java:
##########
@@ -300,8 +302,23 @@ protected Subject createSubjectFromToken(final JWT token) 
throws UnknownTokenExc
 
   public Subject createSubjectFromTokenIdentifier(final String tokenId) throws 
UnknownTokenException {
     TokenMetadata metadata = tokenStateService.getTokenMetadata(tokenId);
+    String username = null;
     if (metadata != null) {
-      return createSubjectFromTokenData(metadata.getUserName(), null);
+      String type =  metadata.getMetadata(TYPE);
+      // using tokenID and passcode as CLIENT_ID and CLIENT_SECRET will
+      // result in a metadata item called "type". If the valid is set

Review Comment:
   I'm not sure I understand this sentence. Did you mean "if the `type` is set 
to CLIENT_ID"?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@knox.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to