Muh*_*gan 12 oauth-2.0 openid-connect keycloak keycloak-services keycloak-rest-api
我有一个移动应用程序(react-native)、一个资源服务(spring boot)和 Keycloak Authenticatioin Service(Auth-Service)。
客户端直接使用 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);
};
Run Code Online (Sandbox Code Playgroud)
资源服务:
应用程序.yml
keycloak:
realm: sau
resource: photo-service
bearer-only: false
auth-server-url: http://localhost:8060/auth
credentials:
secret: 69a3e80c-8360-42df-bcec-b6575a6949dc
Run Code Online (Sandbox Code Playgroud)
注意:我已经检查过这个问题,并且尝试设置“X-Forwarded-For”:“ http://localhost:8060/ ”但它没有用 Keycloak 返回:
{
"error": "invalid_request",
"error_description": "HTTPS required"
}
这是移动客户端获取的示例访问令牌。
“iss”声明因请求的功能而异。变量KEYCLOAK_FRONTEND_URL可以改变这种行为。因此,请尝试在您的 docker-compose 文件中执行以下操作:
KEYCLOAK_FRONTEND_URL: http://10.0.2.2:8060/auth
Run Code Online (Sandbox Code Playgroud)
您需要以外部方式配置从 Spring Boot 应用程序到 Auth 服务器的访问,而不是localhost:
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
Run Code Online (Sandbox Code Playgroud)
这样令牌发行者就会匹配。这可能需要在 keycloak 中禁用外部请求的 SSL 要求或配置正确的 SSL 通信。如果这是用于生产,请以正确的方式进行。
也可以看看:
| 归档时间: |
|
| 查看次数: |
9182 次 |
| 最近记录: |