org.keycloak.common.VerificationException:无效的令牌发行者

时间:2017-02-07 12:43:25

标签: keycloak

我正在开发一款使用我的REST后端的Android应用。后端运行在JBoss实例上,该实例通过Keycloak进行保护。自从我将Keycloak从1.0.7更新到2.1.5后,我遇到了以下问题。 如果我尝试调用后端的REST API,JBoss会写下以下日志:

        [org.keycloak.adapters.BearerTokenRequestAuthenticator] (default task-39) 
Failed to verify token: org.keycloak.common.VerificationException: Invalid token issuer.
            Expected 'http://localhost:8180/auth/realms/myrealm', but was 'http://192.168.178.24:8180/auth/realms/myrealm'
            at org.keycloak.TokenVerifier.verify(TokenVerifier.java:156)
            at org.keycloak.RSATokenVerifier.verify(RSATokenVerifier.java:89)

192.168.178.24是正确的IP地址。这似乎是一个配置问题,但我在哪里可以配置这个地址?

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果您查看实现,这里会抛出您的异常。

public static class RealmUrlCheck implements Predicate<JsonWebToken> {

    private static final RealmUrlCheck NULL_INSTANCE = new RealmUrlCheck(null);

    private final String realmUrl;

    public RealmUrlCheck(String realmUrl) {
        this.realmUrl = realmUrl;
    }

    @Override
    public boolean test(JsonWebToken t) throws VerificationException {
        if (this.realmUrl == null) {
            throw new VerificationException("Realm URL not set");
        }

        if (! this.realmUrl.equals(t.getIssuer())) {
            throw new VerificationException("Invalid token issuer. Expected '" + this.realmUrl + "', but was '" + t.getIssuer() + "'");
        }

        return true;
    }
};

我认为您的客户端配置不正确。你有与Keycloak相同的客户吗?

答案 1 :(得分:0)

非常简单的解决方案:请确保当您的任何组件与Keycloak服务器联系时,它们都使用相同的网址


详细说明:

对于您的情况(与我的情况相同),似乎您的Android应用正在向http://192.168.178.24:8180/...发出http请求,而服务器正在请求(或至少配置为){{1 }}。因此,请更改您的服务器,使其将请求http://192.168.178.24:8180/...

P.S。似乎是预期的行为to avoid some attacks