我有一个移动应用程序(react原生)、一个资源服务(spring启动)和Keycloak身份验证服务(8月-服务)。
客户端直接使用Auth进行身份验证,并获取访问令牌.当我对资源服务进行请求时,资源服务通过向请求来检查访问令牌。但是客户端应用程序和iss字段获得的令牌是http://10.0.2.2:8060/auth/realms/sau和我在http://localhost:8110的资源服务。
凯克雅克说: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);
};

Resource-Service:
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

注意:我检查了这问题,并尝试设置“X转发-For”:"http://localhost:8060/“,但它没有工作,密钥披风返回:{ "error": "invalid_request", "error_description": "HTTPS required" }。
以下是由移动客户端获得的样例访问令牌。
发布于 2020-11-10 15:18:14
"iss“索赔在请求的功能上各不相同。变量URL可以更改此行为。因此,请在您的docker-组合文件中执行以下操作:
KEYCLOAK_FRONTEND_URL: http://10.0.2.2:8060/auth发布于 2020-05-26 09:10:12
您需要配置从Spring应用程序到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这样,令牌发行者就会匹配。这可能需要在keycloak中禁用外部请求的SSL要求,或者配置正确的SSL通信。如果这是为了生产,做正确的方式。
还请参见:
发布于 2020-07-16 02:30:56
如果无法使用外部地址访问auth服务器,怎么办?这不管用。检查https://issues.redhat.com/browse/KEYCLOAK-6984,一个解决办法是设置reaml公钥。但是不建议这样做,因为如果键被旋转,适配器将不会检查新的键。
https://stackoverflow.com/questions/61966384
复制相似问题