Keycloak и Identity Broker (OpenId) Токен IdentityBrokerException больше не действителен

мы установили keycloak как автономный сервер на сервере и зарегистрировали его как адаптер на том же сервере с помощью wildfly. Итак, после регистрации Identity Broker с помощью OpenId (самописный и развернутый в другом домене) мы не будем перенаправлены обратно в наше приложение, но получим следующую ошибку: «Не удалось выполнить обратный вызов клятвы поставщика удостоверений:» Токен отсутствует дольше действителен ». Он работает дальше: DNS: 8080 (8443) /app.war (server wildfly) -> (выполняет перенаправление на keycloak) DNS: 8180 (8543) / auth -> (после выбора провайдера open-id мы будет успешно перенаправлен на него, и мы войдем в систему после ввода имени и пароля) -> (Ошибка) Вместо того, чтобы перенаправляться обратно в наше приложение, мы получаем исключение.

Мы также попробовали Google Auth, чтобы проверить, правильно ли работает сервер, и да, это так. Но также наш Identity Broker правильно работает с localhost. Что это могло быть?

Я ценю любую помощь и предоставлю вам любой фрагмент кода, который вам нужен.

Keycloak 1.9.4.Финал, Wildfly 8.2.1.Финал

Код:

wildfly, standalone-full.xml:

 <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
        <secure-deployment name="jbpm-console.war">
            <realm>nameOfRealm</realm>
            <resource>nameOfClient</resource>
            <enable-basic-auth>true</enable-basic-auth>
            <realm-public-key>myPublicKey</realm-public-key>
            <auth-server-url>myUrl</auth-server-url>
            <ssl-required>none</ssl-required>
            <principal-attribute>preferred_username</principal-attribute>
            <credential name="secret">mysecret</credential>
        </secure-deployment>
    </subsystem>

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
    </interface>
    <interface name="public">
        <inet-address value="${jboss.bind.address:0.0.0.0}"/>
    </interface>
    <interface name="unsecure">
        <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
    </interface>
</interfaces>

 <subsystem xmlns="urn:jboss:domain:undertow:1.2">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
                <single-sign-on path="/"/>
            </host>
        </server>



23:33:18,529 ERROR [org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] (default task-5) Failed to make identity provider oauth callback: org.keycloak.broker.provider.IdentityBrokerException: Token is no longer valid
at org.keycloak.broker.oidc.OIDCIdentityProvider.validateToken(OIDCIdentityProvider.java:346)
at org.keycloak.broker.oidc.OIDCIdentityProvider.getFederatedIdentity(OIDCIdentityProvider.java:254)
at org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider$Endpoint.authResponse(AbstractOAuth2IdentityProvider.java:230)
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)

person user3467471    schedule 26.05.2016    source источник


Ответы (2)


Возникла та же проблема с Office 365, где Microsoft Azure AD отвечает за выпуск токенов, которые будут проверяться и использоваться Keycloak.

Проблема заключалась в том, что на сервере Keycloak наблюдался сдвиг часов. Это привело к тому, что Keycloak отклонил веб-токен JSON из-за очевидного истечения срока действия токена, когда это было не так. Чтобы решить эту проблему, необходимо было синхронизировать дату на сервере, на котором размещен Keycloak, чтобы уменьшить или устранить перекос часов, чтобы Keycloak проверил токен до истечения срока его действия.

person Vineet Reynolds    schedule 08.08.2016
comment
ЭТО ПРАВДА. ЭТО БЫЛ ДЕЛО. - person user3467471; 09.08.2016

Существует существующий запрос функции: https://issues.jboss.org/browse/KEYCLOAK-4538

Мы столкнулись с той же проблемой и исправили наш серверный и клиентский модуль кода для поддержки функции сдвига часов.

Исправлен класс JsonWebToken в проекте keycloak-core. Заменен модуль keycloak-core в JBoss / Wildfly на обновленный модуль. Изменения в JsonWebToken указаны ниже.

# Added these two fields to get clock skew from system property
public static final String KEYCLOAK_WEBTOKEN_CLOCK_SKEW_SEC = "Keycloak.WebToken.ClockSkew.Sec";
private static final Integer clockSkew = Integer.getInteger(KEYCLOAK_WEBTOKEN_CLOCK_SKEW_SEC, 0);

    # Updated this method to support clock skew
    @JsonIgnore
    public boolean isNotBefore() {

        int currentTime = Time.currentTime() + clockSkew;
        int tokenTime = notBefore;

        return currentTime >= tokenTime;
    }
person Kailash    schedule 31.05.2017