我正在开发一个Android应用程序,它使用我的REST后端。后端运行在一个JBoss实例上,该实例通过密钥罩进行保护。自从我将我的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地址。这似乎是一个配置问题,但我可以在哪里配置此地址?
有谁知道如何解决这个问题吗?
发布于 2020-07-01 10:51:07
非常简单的解决方案:确保当您的任何组件与Keycloak服务器联系时,它们使用相同的url。
详细解释:
对于您的情况(和我的情况一样),您的Android应用程序似乎正在向http://192.168.178.24:8180/...发出http请求,而您的服务器正在请求(或至少配置为) http://192.168.178.24:8180/...。因此,请更改您的服务器,使其请求http://192.168.178.24:8180/...。
附注:例外似乎是预期行为to avoid some attacks。
发布于 2017-08-08 17:02:39
如果你仔细看一下它的实现,它会抛出你的异常。
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中相同的客户端?
https://stackoverflow.com/questions/42090214
复制相似问题