Keycloak无效令牌发行者

时间:2020-05-23 01:38:49

标签: oauth-2.0 keycloak openid-connect keycloak-services keycloak-rest-api

我有一个移动应用程序(本机),一个资源服务(春季启动)和Keycloak身份验证服务(身份验证服务)。

客户端直接使用Auth-Service进行身份验证,并获取访问令牌。 当我向资源服务请求时,资源服务通过询问Auth-Service来检查访问令牌。但是客户端应用和iss字段获得的令牌是http://10.0.2.2:8060/auth/realms/sau,我的资源服务在http://localhost:8110

Keycloak说:error="invalid_token", error_description="Invalid token issuer. Expected 'http://localhost:8060/auth/realms/sau', but was 'http://10.0.2.2:8060/auth/realms/sau'"

我的问题是我该如何代表客户在资源服务中进行身份验证?

移动应用:

 export const prepareRequestBody = credentials => {
  const params = new URLSearchParams();
  params.append('username', credentials.username);
  params.append('password', credentials.password);
  params.append('client_id', "nasilim-mobile-app");
  params.append('grant_type', "password");
  return params;
};

export const login = credentials => {
  const params = prepareRequestBody(credentials);
  return axios.post(LOGIN, params);
};

enter image description here

资源服务:

application.yml

keycloak:
  realm: sau
  resource: photo-service
  bearer-only: false
  auth-server-url: http://localhost:8060/auth
  credentials:
     secret: 69a3e80c-8360-42df-bcec-b6575a6949dc

enter image description here

注意:我已经检查过this问题,并且尝试设置“ X-Forwarded-For”:“ http://localhost:8060/”,但是它不起作用Keycloak返回: { "error": "invalid_request", "error_description": "HTTPS required" }

这是移动客户端获得的Sample Access Token

3 个答案:

答案 0 :(得分:1)

如果无法使用外部地址访问身份验证服务器怎么办?这是行不通的。选中https://issues.redhat.com/browse/KEYCLOAK-6984 一种解决方法是设置 reaml公共密钥。但是不建议这样做,因为如果旋转钥匙,适配器将不会检查新钥匙。

答案 1 :(得分:0)

您需要以外部方式(而不是 localhost

)配置从Spring Boot应用到Auth服务器的访问权限
keycloak:
  realm: sau
  resource: photo-service
  bearer-only: false
  auth-server-url: http://10.0.2.2:8060/auth
  credentials:
     secret: 69a3e80c-8360-42df-bcec-b6575a6949dc

这样,令牌发行者将匹配。这可能需要禁用密钥斗篷中对外部请求的SSL要求或配置正确的SSL通信。如果这是用于生产,请按照正确的方式进行。

另请参见:

答案 2 :(得分:0)

“ iss”声明在请求功能上有所不同。变量KEYCLOAK_FRONTEND_URL可以更改此行为。因此,请尝试在您的docker-compose文件中执行以下操作:

KEYCLOAK_FRONTEND_URL: http://10.0.2.2:8060/auth