我在docker swarm容器中运行IdentityServer4(identity-service
)。这是我的堆栈文件中的服务设置:
identity-service:
image: identity:${TAG:-latest}
environment:
- DATABASE_CONNECTION_STRING=mongodb://mongo:27017
- ASPNETCORE_URLS=http://0.0.0.0:8080
- LOGGING_LEVEL=1
networks:
- proxy
- database
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
order: start-first
labels:
- com.df.notify=true
- com.df.servicePath=${SERVICE_PATH:-/identity}
- com.df.port=8080
healthcheck:
test: ["CMD", "curl", "-f", "localhost:8080/health"]
interval: 5s
timeout: 10s
retries: 10
start_period: 10s
我也在使用IdentityModel2.Client
来请求令牌。这也是通过另一个端点identity-service
在/user/login
中完成的:DiscoveryClient
。这就是我使用 var discoveryDocument = await new DiscoveryClient(hostUrl).GetAsync();
if (discoveryDocument.IsError) {
throw new Exception(
String.Format("Failed to find discovery document at url: {0}, received following token-endpoint: {1}",
hostUrl, discoveryDocument.TokenEndpoint));
}
return new TokenClient(discoveryDocument.TokenEndpoint, "Web", authorizationSecret);
:
Exception
如果我不在容器中运行此功能,这样可以正常工作,但由于某种原因,因为discoveryDocument.TokenEndpoint
null 而在群组中运行时会抛出http://0.0.0.0:8080/.well-known/openid-configuration
。我还尝试将shell放入容器中,看看我是否可以使用curl访问hostUrl
。
(在容器中运行时http://0.0.0.0:8080
为2018-04-10 16:18:50.678 ERROR 15716 --- [ restartedMain] com.zaxxer.hikari.HikariConfig : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
)
答案 0 :(得分:0)
我通过不使用DiscoveryClient
解决了这个问题。相反,我直接将TokenClient
URL提供给token-endpoint,如下所示:
new TokenClient(String.Concat(hostUrl, "/connect/token"), "Web", authorizationSecret);
其中hostUrl
由环境变量提供,并在我的docker-stack文件中设置为http://127.0.0.1
。出于某种原因,这有效......
答案 1 :(得分:0)
在客户端上使用IdentityServer时,我遇到了同样的问题。 在启动中,缺少AddDeveloperSigningCredential,这导致了问题。