Asp.net core 使用IdentityServer4的SSO是否应该在每个请求上访问授权端点?
我正在使用IdentityServer4从多个ASP.net核心网站实现单点登录。我能够通过一个站点登录,并且成功地将我登录到另一个站点。然而,我发现奇怪的是,在我登录到这两个站点之后,如果我同时浏览了另一个站点,则任何需要身份验证/授权的页面都会将我重定向回授权端点。例如:Asp.net core 使用IdentityServer4的SSO是否应该在每个请求上访问授权端点?,asp.net-core,identityserver4,Asp.net Core,Identityserver4,我正在使用IdentityServer4从多个ASP.net核心网站实现单点登录。我能够通过一个站点登录,并且成功地将我登录到另一个站点。然而,我发现奇怪的是,在我登录到这两个站点之后,如果我同时浏览了另一个站点,则任何需要身份验证/授权的页面都会将我重定向回授权端点。例如: +-----+--------------------+-------------------------------------+---------------------------------------------
+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+
| Seq | Host | Request | Response |
+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+
| 1 | apple.example.com | GET /About | 302 Found; Location=https://login.example.com/connect/authorize?... |
| 2 | login.example.com | GET /connect/authorize?... | 302 Found; Location=https://login.example.com/Account/Login?… |
| 3 | login.example.com | GET Account/Login?… | 200 OK |
| 4 | login.example.com | POST /Account/Login?... | 302 Found; Location=/connect/authorize/callback?... |
| 5 | login.example.com | GET /connect/authorize/callback?... | 200 OK |
| 6 | apple.example.com | POST /signin-oidc | 302 Found; Location=https://apple.example.com/About |
| 7 | apple.example.com | GET /About | 200 OK |
| 8 | banana.example.com | GET /About | 302 Found; Location=https://login.example.com/connect/authorize?... |
| 9 | login.example.com | GET /connect/authorize?... | 200 OK |
| 10 | banana.example.com | POST /signin-oidc | 302 Found; Location=https://banana.example.com/About |
| 11 | banana.example.com | GET /About | 200 OK |
| 12 | banana.example.com | GET /About | 200 OK |
| 13 | banana.example.com | GET /About | 200 OK |
| 14 | apple.example.com | GET /About | 302 Found; Location=https://login.example.com/connect/authorize?... |
| 15 | login.example.com | GET /connect/authorize?... | 200 OK |
| 16 | apple.example.com | POST /signin-oidc | 302 Found; Location=https://apple.example.com/About |
| 17 | apple.example.com | GET /About | 200 OK |
| 18 | apple.example.com | GET /About | 200 OK |
+-----+--------------------+-------------------------------------+---------------------------------------------------------------------+
当Seq=11时,一切正常。我登录了苹果和香蕉两个网站,但只输入了一次凭据。我上次在banana.example.com上加载了一个页面。只要我停留在该站点第12行和第13行,站点cookie就可以工作。但是,如果我在apple.example.com上加载另一个页面,它会将我传递回授权端点,即使我已经在该站点上进行了身份验证。这让我很惊讶。每当我切换站点时,这种情况就会继续发生,我必须再次点击身份服务器。我不必重新输入凭据,但重定向有点不协调。我特别担心它会干扰POST请求
我们的网站是这样的,用户在同一时间使用多个网站,来回切换是很常见的
这是它应该工作的方式,还是我的配置有问题?我希望每个站点只需访问授权端点一次。您的期望是正确的。确保为每个应用程序使用不同的cookie名称,否则会导致您描述的确切行为 您可以在身份验证服务配置中设置cookie名称:
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; })
.AddCookie(options =>
{
options.Cookie.Name = "someCookieName";
})
您的期望是正确的,您是否为每个应用程序使用不同的cookie名称?如果不是那样的话,那可能会导致它。谢谢,@VidmantasBlazevicius。就是这样,我上面的问题过于笼统了。在localhost不同端口上调试多个站点时会出现中断,但在部署到实际具有不同域名的站点时,会按预期工作。我忘了cookies不是特定于端口的。如果你想留下答案,我可以接受。没问题,非常欢迎。我在这个问题上花了无数个小时,才意识到事情就这么简单。