Identity Server 4和Docker

Identity Server 4和Docker,第1张

Identity Server 4和Docker

网络

假设您有两个物理机器:C1和C2。每台机器都是docker主机。

C1运行身份验证容器

C2运行WebApi容器。

在Auth dockerfile中公开端口5000时,

C1:5000
应该可以从C2
WebApi容器本身访问该地址。您可能更喜欢IP而不是DNS,这没关系。此外,您应该能够成功执行GET请求以
http://C1:5000/.well-known/openid-configuration
确保。

要实现此目标,可能会遇到很多网络问题。例如:什么会阻止在Docker容器中运行的代码连接到单独服务器上的数据库?

发行人验证

发行人验证失败

您的客户的授权URL与Auth主机名不同。缺省情况下,授权URL应等于

issuer
属性值(此属性在Identity Server自动发现文档响应中)。

issuer
属性值取决于客户的网络请求:

GET http://127.0.0.1:6000/.well-known/openid-configuration -> "issuer": "http://127.0.0.1:6000"GET http://localhost:6000/.well-known/openid-configuration -> "issuer": "localhost:6000"

尝试

IssuerUri
为开发环境设置一个常量:

services.AddIdentityServer(x =>{    x.IssuerUri = "foo";})

达到恒定

issuer
值。这允许通过任何有效的URL(使用IP,计算机名或DNS)来调用Identity Server:

GET http://anything/.well-known/openid-configuration -> "issuer": "foo"

DiscoveryClient
也验证
issuer
价值。这是一个简单的相等比较:

public bool ValidateIssuerName(string issuer, string authority){    return string.Equals(issuer, authority, StringComparison.Ordinal);}

您可以通过以下方式禁用它:

DiscoveryClient.Policy.ValidateIssuerName = false;

仅供参考,

IssuerUri
设置,不建议用于生产环境:

IssuerUri设置将出现在发现文档中的发行者名称和已发行的JWT令牌。建议不要设置此属性,该属性从客户端使用的主机名推断发行者名称。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存