[prev in list] [next in list] [prev in thread] [next in thread] 

List:       keycloak-dev
Subject:    [keycloak-dev] Keycloak with Oracle IDCS as Parent IDP
From:       Matt.Domsch () quest ! com (Matt Domsch (mdomsch))
Date:       2018-06-30 18:18:50
Message-ID: BE517EB5CE6C96468C9F9E232C8DD1F53C62B70F () ALVMBXW01 ! prod ! quest ! corp
[Download RAW message or body]

I have seen similar from Azure AD when the scope did not include something that AAD \
expected. In your case be sure scope matches the audience. See \
https://docs.oracle.com/en/cloud/get-started/subscriptions-cloud/csimg/obtaining-access-token-using-user-credentials-client-assertion.html


Thanks,
Matt
________________________________________
From: keycloak-dev-bounces@lists.jboss.org [keycloak-dev-bounces at lists.jboss.org] \
                on behalf of Aznidin Zainuddin [aznidin at yahoo.com]
Sent: Friday, June 29, 2018 4:57 AM
To: keycloak-dev at lists.jboss.org
Subject: [keycloak-dev] Keycloak with Oracle IDCS as Parent IDP

Hi,



I?ve been using keycloak to secure the company?s webpage for a while. There?s a new \
requirement that I use Oracle IDCS IDP. Because the IDP doesn?t support user access \
level/authorization, I?m forced to use the IDP as Keycloak?s parent IDP.



The IDCS supports OpenID Connect 1.0 and so I tried to add it as an external IDP \
using two of the possible methods i.e. OpenID Connect 1.0 and Keycloak OpenId \
Connect. Both methods failed at the point where an eccess token was requested with \
the following stack trace:



09:56:33,923 ERROR [org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] (default \
task-15) Failed to make identity provider oauth callback: \
org.keycloak.broker.provider.IdentityBrokerException: No access_token from server.

        at org.keycloak.broker.oidc.OIDCIdentityProvider.verifyAccessToken(OIDCIdentityProvider.java:443)


        at org.keycloak.broker.oidc.OIDCIdentityProvider.getFederatedIdentity(OIDCIdentityProvider.java:345)


        at org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider$Endpoint.authResponse(AbstractOAuth2IdentityProvider.java:407)


        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)


        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)


        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140)


        at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)


        at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)


        at org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:138)


        at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:107)


        at org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:133)


        at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:101)


        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:406)


        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:213)


        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:228)


        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)


        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)


        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)


        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)


        at org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:90)


        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)


        at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)


        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)


        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)


        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)


        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)


        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)


        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)


        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)


        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)


        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)


        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)


        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)


        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)


        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)


        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)


        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)


        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)


        at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)


        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)


        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)


        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)


        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)


        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)


        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)


        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)


        at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)


        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)


        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)


        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)


        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)


        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)


        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)


        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)


        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)

        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)


        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)


        at java.lang.Thread.run(Thread.java:748)



09:56:33,948 WARN  [org.keycloak.events] (default task-15) type=LOGIN_ERROR, \
realmId=onesys, clientId=null, userId=null, ipAddress=10.255.0.2, \
error=identity_provider_login_failure



-------------------------------------

I?m not really a Keycloak expert but it seems to me that the protocol breaks because \
Keycloak and IDCS ?talks? different dialects. Could it be that there?s some way to \
configure it in Keycloak to make it work?



Oracle came back with the following, I quote:



?         IDCS OIDC discovery endpoint says this:

"token_endpoint_auth_methods_supported": [

        "client_secret_basic",

        "client_secret_jwt"

    ],





?         It seems that when Keycloak is an OIDC RP, it might be ignoring this \
directive and sending the client_secret in POST body anyways. Please check with \
Keycloak team if there is a way to configure Keycloak to use one of the IDCS \
supported ways. This is something that is not our skillset and people with Keycloak \
knowledge will be more effective in helping you with this.





?         If Keycloak doesn?t support one of these two ways, you will need to raise a \
ticket with them to provide support for at least one of these ways of \
client_authentication.





?         On the other hand, IDCS doesn?t yet support ?client_secret_post?. There is \
already an internal bug filed against IDCS for this - BUG 27981356 - TOKEN EXCHANGE \
SHOULD ACCEPT CLIENT_ID AND CLIENT_SECRET IN POST PAYLOAD. However, it doesn?t seem \
that the scheduled delivery of this feature will meet your timelines.

_______________________________________________
keycloak-dev mailing list
keycloak-dev at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic