【发布时间】:2020-11-25 22:12:41
【问题描述】:
我有两个身份服务器和一个 Web API。 我试图做的是让 API 对一个或两个 IdentityServers 进行身份验证,并且能够在其中一个发生故障时进行切换。如果可能的话,我还希望能够在运行时添加一个新的 IdentityServer。
这里有什么最佳实践吗?
目前看起来是这样的。
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = $"http://localhost:5000",
ScopeName = "my.scope",
RequireHttpsMetadata = false,
ScopeSecret = "secret",
});
如果我在端口 5000 处关闭 IdentityServer,我将无法再使用 API。这是意料之中的。
【问题讨论】:
-
您应该在负载均衡器后面有冗余的身份服务器。然后网络会处理这个问题。
-
我制作了一个非常简单的中间件,它将 localhost:5000 上的调用重新路由到正确的身份服务器。这很好用..一次(?)。之后,他直接进入身份服务器并忽略我设置的权限。他会在运行时更新 athority 吗?
-
如果其中一个调用超时,我能否以某种方式告诉他重试授权?即使我现在实现了正确的负载均衡器,它仍然会具有相同的行为,因为 IdentityServer 会告诉要使用哪些地址。所以在初始调用之后的所有调用都将绕过负载均衡器。我不介意这个。但如果可能的话,如果 IdentityServer 出现故障,我想重试。截至目前,API 将与 IdentityServer 一起消失,即使使用负载均衡器也是如此。