我试图让MVC Core Web应用程序与Identity Server和Docker一起使用。以下是我采取的步骤:
1)下载快速入门:https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev
运行该项目并看到它按预期工作。现在尝试将Docker添加到等式中:
2)打开解决方案。右键单击:IdentityServerWithAspNetIdentity并选择:Add Container Orchestration Support(然后是Docker Compose,然后是Linux)。 3)右键单击MVCClient并选择:添加Container Orchestration Support(然后是Docker Compose,然后是Linux)。 4)将Docker-compose.override.yml更改为此(请注意,我只将每个服务的端口从80更改为5002:80和5000:80):
version: '3.4'
services:
mvcclient:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5002:80"
identityserverwithaspnetidentity:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5000:80"
5)尝试运行项目以查看发生的情况。当我尝试访问时:Home / Secure;而不是转发到登录网页;我看到这个错误:'Unable to obtain configuration from:http://localhost:5000/.well-known/openid-configuration'.
我相信这是因为Docker容器无法看到localhost:5000。因此阅读了几篇博文后;我试试这个:
6)在MVCClient中打开启动并更改:
options.Authority = "http://localhost:5000";
对此:
options.Authority = "http://identityserverwithaspnetidentity:80";
但是,我只看到DNS错误(我相信404)。在这种情况下,我需要做些什么才能让Identity Server使用MVC Web应用程序?
到目前为止,我看到了这里:How can I use IdentityServer4 from inside and outside a docker machine?和这里:Identity Server 4 and docker。然而到目前为止答案没有帮助。
正如你在我的thread上已经注意到的那样,我遇到了类似的问题。我所做的是在我的IdentityServerAuthenticationOptions
(API端)上配置以下内容:
1)设置正确的Autority
,在你的情况下,我会说它应该是http://identityserverwithaspnetidentity/
2)配置ApiName
(这是ApiResource的名称)
3)也许还配置JwtBackChannelHandler
(我不确定这是否是必需的)
4)如果你没有使用Https,我会停用它(我不记得是否明确需要它:将RequireHttpsMetadata
设置为false)
在客户端我做了以下
1)将ValidateIssuerName
设置为false
2)如果你没有使用Https,也可以通过将RequireHttps
设置为false来取消它(我不记得是否明确需要它)
在过去的几天里,我一直在努力解决同样的问题,最后找到了一个有效的解决方案!您需要做的就是将权限(在您的mvc客户端中)和IssuerUri(在您的身份API中)设置为docker主机的IP地址。在Windows上,这是10.0.75.1。
在查看eShopOnContainers中的实现后,我终于能够想出这个,我发现这是学习如何在.NET Core中实现dockerized微服务架构的非常好的资源。