[ 
https://issues.apache.org/jira/browse/KNOX-2212?focusedWorklogId=394304&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-394304
 ]

ASF GitHub Bot logged work on KNOX-2212:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 27/Feb/20 16:32
            Start Date: 27/Feb/20 16:32
    Worklog Time Spent: 10m 
      Work Description: risdenk commented on pull request #274: KNOX-2212 - 
Token permissiveness
URL: https://github.com/apache/knox/pull/274#discussion_r385224019
 
 

 ##########
 File path: 
gateway-server/src/main/java/org/apache/knox/gateway/services/token/impl/DefaultTokenStateService.java
 ##########
 @@ -310,4 +325,30 @@ protected boolean needsEviction(final String token) 
throws UnknownTokenException
     return tokenExpirations.keySet().stream().collect(Collectors.toList());
   }
 
+  /**
+   * A function that returns the JWT token expiration. This is only called when
+   * gateway.knox.token.permissive.failure.enabled property is set to true.
+   *
+   * @param token token to be verified and saved
+   */
+  protected long getJWTTokenExpiration(final String token) {
+    if (!isValidIdentifier(token)) {
+      throw new IllegalArgumentException("Token data cannot be null.");
+    }
+    JWT jwt;
+    try {
+      jwt = new JWTToken(token);
+    } catch (final ParseException e) {
+      log.errorParsingToken(e.toString());
+      throw new IllegalArgumentException(e);
 
 Review comment:
   So its subtle. `getJWTTokenExpiration` is called from the following code:
   
   ```
    try {
         validateToken(token);
       } catch (final UnknownTokenException e) {
         /* if token permissiveness is enabled we check JWT token expiration 
when the token state is unknown */
         if (permissiveFailureEnabled && StringUtils
             .containsIgnoreCase(e.toString(), "Unknown token")) {
           return getJWTTokenExpiration(token);
         } else {
           throw e;
         }
       }
   ```
   
   What this means is that originally the `validateToken` call would throw 
`UnknownTokenException`. With this change, the `UnknownTokenException` is 
caught and `getJWTTokenExpiration` is called. If `getJWTTokenExpiration` fails, 
the code throws `IllegalArgumentException`
   
   So it has the same effect of converting `UnknownTokenException` to 
`IllegalArgumentException` based on the settings introduced.
 
----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 394304)
    Time Spent: 2h  (was: 1h 50m)

> TokenStateService should fail permissively
> ------------------------------------------
>
>                 Key: KNOX-2212
>                 URL: https://issues.apache.org/jira/browse/KNOX-2212
>             Project: Apache Knox
>          Issue Type: Bug
>          Components: Server
>    Affects Versions: 1.4.0
>            Reporter: Philip Zampino
>            Assignee: Sandeep More
>            Priority: Major
>          Time Spent: 2h
>  Remaining Estimate: 0h
>
> While unlikely, it's possible that the TokenStateService may be presented 
> with a token, for which it has no state, but which can be verified as a valid 
> (origin, expiration, etc...) token. In these cases, rather than rejecting the 
> token for lack of server-managed state, the token's state should be recorded, 
> and the associated operation permitted.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to