openid - Keycloak 和身份代理 (OpenId) IdentityBrokerException "Token no longer valid"

标签 openid wildfly identity keycloak

我们已经在服务器上独立安装了 keycloak,并通过 wildfly 在同一台服务器上将其注册为适配器。因此,在 Identity Broker 使用 OpenId(自行编写并部署在其他域上)注册后,我们不会被重定向回我们的应用程序,但我们会收到下一个错误:“无法进行身份提供者宣誓回调:”Token is no更长时间有效”。 它接下来工作: DNS:8080(8443)/app.war (server wildfly)-> (重定向到 keycloak on) DNS:8180(8543)/auth -> (在选择 open-id 提供者后,我们将成功重定向到它,我们'将在输入名称和密码后登录系统)->(错误)我们没有被重定向到我们的应用程序,而是得到一个异常。

我们还尝试使用 Google Auth 来测试服务器是否正常工作,是的,确实如此。而且我们的 Identity Broker 也可以与 localhost 一起正常工作。它可能是什么?

我很感激任何帮助,并将为您提供您需要的任何代码片段。

Keycloak 1.9.4.Final,Wildfly 8.2.1.Final

代码:

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)

最佳答案

在 Office 365 中遇到了同样的问题,其中 Microsoft Azure AD 负责发出将由 Keycloak 验证和使用的 token 。

问题出在 Keycloak 服务器的时钟偏差上。这导致 Keycloak 拒绝 JSON Web token ,因为在实际情况并非如此时, token 显然已过期。为解决此问题,必须同步托管 Keycloak 的服务器上的日期以减少或消除时钟偏差,以便 Keycloak 能够在 token 过期之前对其进行验证。

关于openid - Keycloak 和身份代理 (OpenId) IdentityBrokerException "Token no longer valid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470288/

相关文章:

authentication - OAuth 与 OpenID : confused about when to use one of these and why

c# - 将 Google OpenID 迁移到 OpenID Connect : openid_id does not match

asp.net-mvc - 通过 RPXNow 加快 20 秒 OpenID 登录速度

java - Wildfly 20无法在Ubuntu 20上运行 “out-of-the-box”

c# - 从 Google OpenID 迁移到新的 OAuth 2

java - 使用 RESTEasy 处理格式错误的@QueryParam

jboss - 在域模式下在从属之间共享属性文件 Wildfly10

python - 为什么 'is' 运算符说这些方法不一样?

asp.net-web-api - 使用 WebAPI 中的 Jwt Bearer Authentication 中间件自定义 WWW-Authenticate 质询 header

java - 如何跨不同 JVM 保留对象标识