.net core 多标识服务器4服务的最佳实践

.net core 多标识服务器4服务的最佳实践,.net-core,identityserver4,.net Core,Identityserver4,我有两个IdentityServer和一个Web API。 我试图做的是让API通过一个或两个IdentityServer的身份验证,并且在其中一个服务器出现故障时能够切换。如果可能的话,我也希望能够在运行时添加一个新的IdentityServer 这里有什么最佳实践吗 现在看起来是这样的 app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions {

我有两个IdentityServer和一个Web API。 我试图做的是让API通过一个或两个IdentityServer的身份验证,并且在其中一个服务器出现故障时能够切换。如果可能的话,我也希望能够在运行时添加一个新的IdentityServer

这里有什么最佳实践吗

现在看起来是这样的

        app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = $"http://localhost:5000",
            ScopeName = "my.scope",
            RequireHttpsMetadata = false,
            ScopeSecret = "secret",
        });

如果我在端口5000关闭IdentityServer,我将无法再使用API。这是意料之中的。

我不确定这是否是解决问题的好办法。但这是一种方式。 我向路由服务请求“first identityservice”来设置选项中的权限。 然后我添加了一个自定义的内省BackchannelHandler

        app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = $"http://{v.Address}:{v.Port}",
            IntrospectionBackChannelHandler = new CustomIntrospectionBackChannelHandler(consulService)
因为我所有的身份服务器看起来都一样,但是在不同的地址上,所以我真的不必费心再做授权的事情了

在习惯的内省中。。。。我检查每个内省并将其发送到“正确”的identityserver。如果它不工作,我尝试另一个identityserver

var qs=await request.Content.ReadAsStringAsync(); var queryDic=QueryHelpers.ParseQuery(wait request.Content.ReadAsStringAsync())


我不确定这是不是解决问题的好办法。但这是一种方式。 我向路由服务请求“first identityservice”来设置选项中的权限。 然后我添加了一个自定义的内省BackchannelHandler

        app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = $"http://{v.Address}:{v.Port}",
            IntrospectionBackChannelHandler = new CustomIntrospectionBackChannelHandler(consulService)
因为我所有的身份服务器看起来都一样,但是在不同的地址上,所以我真的不必费心再做授权的事情了

在习惯的内省中。。。。我检查每个内省并将其发送到“正确”的identityserver。如果它不工作,我尝试另一个identityserver

var qs=await request.Content.ReadAsStringAsync(); var queryDic=QueryHelpers.ParseQuery(wait request.Content.ReadAsStringAsync())


您应该在负载平衡器后面有冗余的IdentityServer。我制作了一个非常简单的中间件,将本地主机5000上的调用重新路由到正确的identityserver。这个很好用。。一次(?)。之后,他直接进入身份服务器,无视我设置的权限。他是否在运行时更新了athority?如果其中一个调用超时,我是否可以告诉他重试授权?即使我现在实现了一个正确的负载平衡器,它仍然会有相同的行为,因为IdentityServer会告诉我要使用哪个地址。。因此,在初始调用之后的所有调用都将绕过负载平衡器。我不介意。但如果可能,如果IdentityServer出现故障,我希望重试。到目前为止,API将随着IdentityServer而消亡,即使使用负载平衡器也是如此。我制作了一个非常简单的中间件,将本地主机5000上的调用重新路由到正确的identityserver。这个很好用。。一次(?)。之后,他直接进入身份服务器,无视我设置的权限。他是否在运行时更新了athority?如果其中一个调用超时,我是否可以告诉他重试授权?即使我现在实现了一个正确的负载平衡器,它仍然会有相同的行为,因为IdentityServer会告诉我要使用哪个地址。。因此,在初始调用之后的所有调用都将绕过负载平衡器。我不介意。但如果可能,如果IdentityServer出现故障,我希望重试。到目前为止,API将随着IdentityServer而消亡,即使使用负载平衡器也是如此。