我有一个移动应用程序(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: …Run Code Online (Sandbox Code Playgroud) oauth-2.0 openid-connect keycloak keycloak-services keycloak-rest-api
我想设置一个包含keycloak,postgres和webapp实例的Docker网络.
有没有办法在容器之间进行网络通信,还能理解oidc客户端重定向?我有一个问题,容器可以互相交谈,如果我设置OIDC与docker网络的容器名称,但后来我遇到了客户端的问题,无法连接到Docker网络之外的那些相同的URL主机.
任何人都可以指向正确的docker文档来查看可能的DNS解决方案或主机到容器通信吗?
----编辑----
澄清.容器可以在容器名称下相互通信,但客户端(即Chrome)必须使用localhost与所有内容进行通信.在我的ui Web应用程序中的OIDC连接设置中,我必须使用容器名称或localhost.如何让我的客户了解容器名称以便提出正确的请求?
version: '2'
services:
ui:
container_name: 'ui'
image: 'bdparrish/ui:0.1'
build:
context: .
dockerfile: ./ui/Dockerfile
ports:
- "8085:80"
depends_on:
- "postgres"
- "keycloak"
networks:
- auth-network
environment:
- ASPNETCORE_ENVIRONMENT=Docker
postgres:
container_name: postgres
image: 'postgres'
environment:
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
networks:
- auth-network
keycloak:
container_name: keycloak
image: jboss/keycloak
ports:
- "8080:8080"
depends_on:
- postgres
environment:
DB_VENDOR: "POSTGRES"
DB_ADDR: postgres
DB_PORT: 5432
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
restart: always
networks:
- auth-network …Run Code Online (Sandbox Code Playgroud)