我通过了教程:https://docs.duendesoftware.com/identityserver/v6/quickstarts/2_interactive/
在附件中,我尝试添加身份服务器的另一个实例作为另一个外部身份提供程序。在这之后,它刚开始就停止工作了。没有错误没有警告..。
每个都是分开工作的。
到底是谁面对的?
以下是我如何注册了几个身份提供者:
builder.Services.AddAuthentication()
.AddOpenIdConnect("oidc", "Demo IdentityServer", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "https://demo.duendesoftware.com";
options.ClientId = "interactive.confidential";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
})
.AddOpenIdConnect("oidc", "My IdentityServer", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "https://localhost:5004";
options.ClientId = "myprovider";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});发布于 2022-08-02 06:53:57
一个问题是,两个处理程序都在侦听同一个回调URL(URL的IdentityServer向客户端发送请求)
默认情况下,它们被设置为
CallbackPath = new PathString("/signin-oidc");
SignedOutCallbackPath = new PathString("/signout-callback-oidc");
RemoteSignOutPath = new PathString("/signout-oidc");您需要在每个处理程序中将它们设置为不同的路径。
另外,架构名称应该是不同的"oidc“。
但总的来说,我认为让你的客户信任两个不同的身份提供者是个坏主意,我认为最好只信任一个。
另一种方法是在本地拥有自己的身份提供者,然后信任各种外部提供者,如下所示:

通常,如果每个服务只需要信任一个提供者,您的复杂性就会降低。特别是对于使用JwtBearer的API,他们更愿意只有一个可信的提供者。
https://stackoverflow.com/questions/73196043
复制相似问题