JWT Oauth Token Exchange for CAS 7.1.2

63 views
Skip to first unread message

Ian Francis

unread,
Dec 27, 2024, 10:18:33 PM12/27/24
to CAS Community
Greetings, I was doing a prototype of using CAS 7.1.2 to act as a provider for the Oauth Token Exchange flow. In my prototype I had established a service with the client_credentials flow so that I could easily retrieve an access token to use for the subject_token.

In my first attempt I had provided a JWT token with a subject_token_type of urn:ietf:params:oauth:token-type:jwt and I recieved an error stating that it was an invalid ticket like so:

   2024-12-27 16:06:59,279 ERROR [org.apereo.cas.support.oauth.web.endpoints.OAuth20AccessTokenEndpointController] - <INVALID_TICKET
        AbstractTicketRegistry.java:getTicket:121
        DirectMethodHandleAccessor.java:invoke:103
        Method.java:invoke:580
        AopUtils.java:invokeJoinpointUsingReflection:355

I then changed my subject token to an opaque token and was able to get the exchange to work.

The next thing I tried was to supply the subject_token_type of urn:ietf:params:oauth:token-type:jwt and provide a jwt token as the subject_token. This time I bypassed the above error and encountered an issue where the CAS Token validator was expecting the "nbf" claim to be on the JWT. I looked through the code and documentation and could not find any ways to add the "nbf" claim into the JWT token. All of the JWT tokens I had generated from CAS using the client_credentials grant.

2024-12-27 13:33:52,652 ERROR [org.apereo.cas.support.oauth.web.endpoints.OAuth20AccessTokenEndpointController] - <JWT missing required claims: [nbf]>
com.nimbusds.jwt.proc.BadJWTException: JWT missing required claims: [nbf]
        at com.nimbusds.jwt.proc.DefaultJWTClaimsVerifier.verify(DefaultJWTClaimsVerifier.java:311)
        at org.apereo.cas.support.oauth.validator.token.OAuth20TokenExchangeGrantTypeTokenRequestValidator.extractRegisteredService(OAuth20TokenExchangeGrantTypeTokenRequestValidator.java:87)
        at org.apereo.cas.support.oauth.validator.token.OAuth20TokenExchangeGrantTypeTokenRequestValidator.validateInternal(OAuth20TokenExchangeGrantTypeTokenRequestValidator.java:53)
        at org.apereo.cas.support.oauth.validator.token.BaseOAuth20TokenRequestValidator.validate(BaseOAuth20TokenRequestValidator.java:72)
        at org.apereo.cas.support.oauth.web.endpoints.OAuth20AccessTokenEndpointController.verifyAccessTokenRequest(OAuth20AccessTokenEndpointController.java:217)
        at org.apereo.cas.support.oauth.web.endpoints.OAuth20AccessTokenEndpointController.handleRequest(OAuth20AccessTokenEndpointController.java:100)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)


From this I am ultimately trying to understand if CAS can be configured to support the token exchange grant when using JWT access tokens as the subject_token?

Let me know if I can provide any additional information.
Reply all
Reply to author
Forward
0 new messages