[ 
https://issues.apache.org/jira/browse/KNOX-3258?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tamás Marcinkovics updated KNOX-3258:
-------------------------------------
    Description: 
When configuring Knox to use OpenID Connect, (setting up pac4j as a federation 
provider in knoxsso and using the client OidcClient or AzureAdClient, etc.), 
login fails with a 500 internal server error and the stack trace shows that 
oauth2-oidc-sdk:8.22 used by pac4j:4.5.6 is not compatible with the 
com.nimbusds:nimbus-jose-jwt:10.

HTTP ERROR 500 javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
URI:    /gateway/knoxsso/api/v1/websso
STATUS:    500
MESSAGE:    javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
SERVLET:    knoxsso-knox-gateway-servlet
CAUSED BY:    javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
CAUSED BY:    javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
CAUSED BY:    java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;

Stack trace:

ERROR knox.gateway (GatewayServlet.java:service(129)) - Gateway processing 
failed: javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
        at 
org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:65)
 ~[gateway-spi-2.1.0.jar:2.1.0]
...
Caused by: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
        at 
com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet.<init>(IDTokenClaimsSet.java:238)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.toIDTokenClaimsSet(IDTokenValidator.java:339)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:289)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:224)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
org.pac4j.oidc.profile.creator.TokenValidator.validate(TokenValidator.java:103) 
~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:93)
 ~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:45)
 ~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:119) 
~[pac4j-core-4.5.6.jar:?]
        at org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:99) 
~[pac4j-core-4.5.6.jar:?]
        at 
org.pac4j.core.engine.DefaultCallbackLogic.perform(DefaultCallbackLogic.java:88)
 ~[pac4j-core-4.5.6.jar:?]
        at 
org.pac4j.jee.filter.CallbackFilter.internalFilter(CallbackFilter.java:75) 
~[jee-pac4j-5.0.0.jar:?]
        at 
org.pac4j.jee.filter.AbstractConfigFilter.doFilter(AbstractConfigFilter.java:70)
 ~[jee-pac4j-5.0.0.jar:?]
        at 
org.apache.knox.gateway.pac4j.filter.Pac4jDispatcherFilter.doFilter(Pac4jDispatcherFilter.java:344)
 ~[gateway-provider-security-pac4j-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.GatewayFilter$Holder.doFilter(GatewayFilter.java:392) 
~[gateway-server-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.GatewayFilter$Chain.doFilter(GatewayFilter.java:306) 
~[gateway-server-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.filter.XForwardedHeaderFilter.doFilter(XForwardedHeaderFilter.java:50)
 ~[gateway-server-xforwarded-filter-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:59)
 ~[gateway-spi-2.1.0.jar:2.1.0]
        ... 57 more

 

This change was introduced in jose-jwt:9.x.

org.pac4j:pac4j:4.5.6  declares 
<nimbus-jose-jwt.version>8.22.1</nimbus-jose-jwt.version>

We cannot upgrade pac4j due to java 8 dependency.

[https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/versions]

oauth2-oidc-sdk versions 8.x depend on jose-jwt:8.x:

[https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/8.36.2] 
:nimbus-jose-jwt:8.20.1

oauth2-oidc-sdk versions 9.x depend on jose-jwt:9.x.

[https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/9.43.6|https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/8.36.2]
 : nimbus-jose-jwt:9.37.3

but this also breaks pac4j login:


Caused by: java.lang.NoSuchMethodError: 'void 
com.nimbusds.openid.connect.sdk.UserInfoRequest.<init>(java.net.URI, 
com.nimbusds.oauth2.sdk.token.BearerAccessToken)'
at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:99)
 ~[pac4j-oidc-4.5.6.jar:?]
at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:45)
 ~[pac4j-oidc-4.5.6.jar:?]
at org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:119) 
~[pac4j-core-4.5.6.jar:?]
at org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:99) 
~[pac4j-core-4.5.6.jar:?]
 
We have to remain on 9.13 because of the UserInfoRequest change:
 
[https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/src/master/CHANGELOG.txt]
 :
 
version 9.14 (2021-08-19)
    * Updates UserInfoRequest to support DPoPAccessToken.
    * Adds static AccessToken.parse(HTTPRequest) method.
    * Updates AccessTokenUtils.
lang-tag and other libraries do not need to be upgraded.

 

  was:
When configuring Knox to use OpenID Connect, (setting up pac4j as a federation 
provider in knoxsso and using the client OidcClient or AzureAdClient, etc.), 
login fails with a 500 internal server error and the stack trace shows that 
oauth2-oidc-sdk:8.22 used by pac4j:4.5.6 is not compatible with the 
com.nimbusds:nimbus-jose-jwt:10.

HTTP ERROR 500 javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
URI:    /gateway/knoxsso/api/v1/websso
STATUS:    500
MESSAGE:    javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
SERVLET:    knoxsso-knox-gateway-servlet
CAUSED BY:    javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
CAUSED BY:    javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
CAUSED BY:    java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;

Stack trace:

ERROR knox.gateway (GatewayServlet.java:service(129)) - Gateway processing 
failed: javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
javax.servlet.ServletException: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
        at 
org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:65)
 ~[gateway-spi-2.1.0.jar:2.1.0]
...
Caused by: java.lang.NoSuchMethodError: 
com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
        at 
com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet.<init>(IDTokenClaimsSet.java:238)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.toIDTokenClaimsSet(IDTokenValidator.java:339)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:289)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:224)
 ~[oauth2-oidc-sdk-8.22.jar:8.22]
        at 
org.pac4j.oidc.profile.creator.TokenValidator.validate(TokenValidator.java:103) 
~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:93)
 ~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:45)
 ~[pac4j-oidc-4.5.6.jar:?]
        at 
org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:119) 
~[pac4j-core-4.5.6.jar:?]
        at org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:99) 
~[pac4j-core-4.5.6.jar:?]
        at 
org.pac4j.core.engine.DefaultCallbackLogic.perform(DefaultCallbackLogic.java:88)
 ~[pac4j-core-4.5.6.jar:?]
        at 
org.pac4j.jee.filter.CallbackFilter.internalFilter(CallbackFilter.java:75) 
~[jee-pac4j-5.0.0.jar:?]
        at 
org.pac4j.jee.filter.AbstractConfigFilter.doFilter(AbstractConfigFilter.java:70)
 ~[jee-pac4j-5.0.0.jar:?]
        at 
org.apache.knox.gateway.pac4j.filter.Pac4jDispatcherFilter.doFilter(Pac4jDispatcherFilter.java:344)
 ~[gateway-provider-security-pac4j-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.GatewayFilter$Holder.doFilter(GatewayFilter.java:392) 
~[gateway-server-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.GatewayFilter$Chain.doFilter(GatewayFilter.java:306) 
~[gateway-server-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.filter.XForwardedHeaderFilter.doFilter(XForwardedHeaderFilter.java:50)
 ~[gateway-server-xforwarded-filter-2.1.0.jar:2.1.0]
        at 
org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:59)
 ~[gateway-spi-2.1.0.jar:2.1.0]
        ... 57 more

 


> Fix OIDC client login
> ---------------------
>
>                 Key: KNOX-3258
>                 URL: https://issues.apache.org/jira/browse/KNOX-3258
>             Project: Apache Knox
>          Issue Type: Task
>          Components: KnoxSSO
>    Affects Versions: 2.1.0
>            Reporter: Tamás Marcinkovics
>            Assignee: Tamás Marcinkovics
>            Priority: Major
>         Attachments: http500-oidc-client-pac4j-knox-login.png, 
> keycloak-test-after-fix1.png, keycloak-test-after-fix2.png, 
> knox-keycloak-oidc-test-example.tar.gz
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When configuring Knox to use OpenID Connect, (setting up pac4j as a 
> federation provider in knoxsso and using the client OidcClient or 
> AzureAdClient, etc.), 
> login fails with a 500 internal server error and the stack trace shows that 
> oauth2-oidc-sdk:8.22 used by pac4j:4.5.6 is not compatible with the 
> com.nimbusds:nimbus-jose-jwt:10.
> HTTP ERROR 500 javax.servlet.ServletException: 
> javax.servlet.ServletException: java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> URI:    /gateway/knoxsso/api/v1/websso
> STATUS:    500
> MESSAGE:    javax.servlet.ServletException: javax.servlet.ServletException: 
> java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> SERVLET:    knoxsso-knox-gateway-servlet
> CAUSED BY:    javax.servlet.ServletException: javax.servlet.ServletException: 
> java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> CAUSED BY:    javax.servlet.ServletException: java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> CAUSED BY:    java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> Stack trace:
> ERROR knox.gateway (GatewayServlet.java:service(129)) - Gateway processing 
> failed: javax.servlet.ServletException: java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
> javax.servlet.ServletException: java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
>         at 
> org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:65)
>  ~[gateway-spi-2.1.0.jar:2.1.0]
> ...
> Caused by: java.lang.NoSuchMethodError: 
> com.nimbusds.jwt.JWTClaimsSet.toJSONObject()Lnet/minidev/json/JSONObject;
>         at 
> com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet.<init>(IDTokenClaimsSet.java:238)
>  ~[oauth2-oidc-sdk-8.22.jar:8.22]
>         at 
> com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.toIDTokenClaimsSet(IDTokenValidator.java:339)
>  ~[oauth2-oidc-sdk-8.22.jar:8.22]
>         at 
> com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:289)
>  ~[oauth2-oidc-sdk-8.22.jar:8.22]
>         at 
> com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:224)
>  ~[oauth2-oidc-sdk-8.22.jar:8.22]
>         at 
> org.pac4j.oidc.profile.creator.TokenValidator.validate(TokenValidator.java:103)
>  ~[pac4j-oidc-4.5.6.jar:?]
>         at 
> org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:93)
>  ~[pac4j-oidc-4.5.6.jar:?]
>         at 
> org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:45)
>  ~[pac4j-oidc-4.5.6.jar:?]
>         at 
> org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:119) 
> ~[pac4j-core-4.5.6.jar:?]
>         at 
> org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:99) 
> ~[pac4j-core-4.5.6.jar:?]
>         at 
> org.pac4j.core.engine.DefaultCallbackLogic.perform(DefaultCallbackLogic.java:88)
>  ~[pac4j-core-4.5.6.jar:?]
>         at 
> org.pac4j.jee.filter.CallbackFilter.internalFilter(CallbackFilter.java:75) 
> ~[jee-pac4j-5.0.0.jar:?]
>         at 
> org.pac4j.jee.filter.AbstractConfigFilter.doFilter(AbstractConfigFilter.java:70)
>  ~[jee-pac4j-5.0.0.jar:?]
>         at 
> org.apache.knox.gateway.pac4j.filter.Pac4jDispatcherFilter.doFilter(Pac4jDispatcherFilter.java:344)
>  ~[gateway-provider-security-pac4j-2.1.0.jar:2.1.0]
>         at 
> org.apache.knox.gateway.GatewayFilter$Holder.doFilter(GatewayFilter.java:392) 
> ~[gateway-server-2.1.0.jar:2.1.0]
>         at 
> org.apache.knox.gateway.GatewayFilter$Chain.doFilter(GatewayFilter.java:306) 
> ~[gateway-server-2.1.0.jar:2.1.0]
>         at 
> org.apache.knox.gateway.filter.XForwardedHeaderFilter.doFilter(XForwardedHeaderFilter.java:50)
>  ~[gateway-server-xforwarded-filter-2.1.0.jar:2.1.0]
>         at 
> org.apache.knox.gateway.filter.AbstractGatewayFilter.doFilter(AbstractGatewayFilter.java:59)
>  ~[gateway-spi-2.1.0.jar:2.1.0]
>         ... 57 more
>  
> This change was introduced in jose-jwt:9.x.
> org.pac4j:pac4j:4.5.6  declares 
> <nimbus-jose-jwt.version>8.22.1</nimbus-jose-jwt.version>
> We cannot upgrade pac4j due to java 8 dependency.
> [https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/versions]
> oauth2-oidc-sdk versions 8.x depend on jose-jwt:8.x:
> [https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/8.36.2] 
> :nimbus-jose-jwt:8.20.1
> oauth2-oidc-sdk versions 9.x depend on jose-jwt:9.x.
> [https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/9.43.6|https://mvnrepository.com/artifact/com.nimbusds/oauth2-oidc-sdk/8.36.2]
>  : nimbus-jose-jwt:9.37.3
> but this also breaks pac4j login:
> Caused by: java.lang.NoSuchMethodError: 'void 
> com.nimbusds.openid.connect.sdk.UserInfoRequest.<init>(java.net.URI, 
> com.nimbusds.oauth2.sdk.token.BearerAccessToken)'
> at 
> org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:99)
>  ~[pac4j-oidc-4.5.6.jar:?]
> at 
> org.pac4j.oidc.profile.creator.OidcProfileCreator.create(OidcProfileCreator.java:45)
>  ~[pac4j-oidc-4.5.6.jar:?]
> at org.pac4j.core.client.BaseClient.retrieveUserProfile(BaseClient.java:119) 
> ~[pac4j-core-4.5.6.jar:?]
> at org.pac4j.core.client.BaseClient.getUserProfile(BaseClient.java:99) 
> ~[pac4j-core-4.5.6.jar:?]
>  
> We have to remain on 9.13 because of the UserInfoRequest change:
>  
> [https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/src/master/CHANGELOG.txt]
>  :
>  
> version 9.14 (2021-08-19)
>     * Updates UserInfoRequest to support DPoPAccessToken.
>     * Adds static AccessToken.parse(HTTPRequest) method.
>     * Updates AccessTokenUtils.
> lang-tag and other libraries do not need to be upgraded.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to