Asp.net mvc 检测IdentityServer用户是否在匿名用户可用的页面上登录

Asp.net mvc 检测IdentityServer用户是否在匿名用户可用的页面上登录,asp.net-mvc,identityserver4,Asp.net Mvc,Identityserver4,使用具有IdentityServer 4的ASP.NET Core 2应用程序作为身份提供程序。使用两个ASP.NET MVC 5应用程序,它们使用上述应用程序作为身份验证的授权。使用隐式流进行身份验证 第一个应用程序没有任何页面可供匿名用户使用,因此当未经身份验证的用户导航到该页面时,他们将被重定向到IdSrv应用程序以登录。我们称之为“管理门户” 第二个应用程序的欢迎页面可供匿名用户使用,未经验证的用户在访问IdSrv应用程序时不会自动重定向到该应用程序。 但是,如果他们试图访问匿名用户无法

使用具有IdentityServer 4的ASP.NET Core 2应用程序作为身份提供程序。使用两个ASP.NET MVC 5应用程序,它们使用上述应用程序作为身份验证的授权。使用隐式流进行身份验证

第一个应用程序没有任何页面可供匿名用户使用,因此当未经身份验证的用户导航到该页面时,他们将被重定向到IdSrv应用程序以登录。我们称之为“管理门户”

第二个应用程序的欢迎页面可供匿名用户使用,未经验证的用户在访问IdSrv应用程序时不会自动重定向到该应用程序。 但是,如果他们试图访问匿名用户无法访问的某个页面,则身份验证组件将执行其工作,并将用户重定向到IdSrv以首先进行身份验证。
如果经过身份验证的用户导航到此欢迎页面,应用程序会自动将他们重定向到匿名用户不可用的其他页面(即仪表板页面)。让我们将第二个应用程序称为“用户门户”

现在开始解决问题。
考虑用户登录到管理门户并随后进入用户门户的场景。即使用户已使用管理门户登录到系统,但当他们导航到用户门户时,他们可能会通过欢迎页面进行操作,该页面不会检测用户是否登录,因为欢迎页面允许匿名访问

理想的行为是,对于已经通过身份验证的用户,自动从欢迎页面重定向到某个仪表板页面

允许匿名访问的页面是否可以询问IdentityServer当前用户是否已经过身份验证?如果没有经过身份验证,它将只显示内容,如果已经通过身份验证,它将执行重定向到适合经过身份验证的用户的其他页面

我之前已经解决了这个问题(当时我没有使用IdentityServer),方法是让身份验证服务知道哪些页面允许匿名用户使用,并在每次请求时将所有未经身份验证的用户重定向到登录页面。然后,身份验证服务将读取returnUrl值,如果它与允许的页面之一匹配,用户将被重定向回匿名页面,并添加“anonymous=1”查询参数以防止无限循环。使用“anonymous=1”查询参数将指示应用程序不要将未经身份验证的用户重定向到身份验证服务。但这似乎有点骇人听闻


有什么想法吗?

正如McGuireV10所提到的,您可以在这里使用客户端的prompt=none方法。您在隐藏的iframe中发出授权端点请求,如果响应返回正常(即不需要登录),则您知道用户已经在IDP上进行了身份验证。实现起来有点麻烦,但它是一种“官方”方法,并且是会话监视规范的一部分。

您可以使用我用于实现持久登录的相同方法。我回答了我自己的问题。谢谢你的回答。隐藏的iframe解决方案对我来说不够好,因为我想在呈现页面之前获取这些信息。我使用了一个类似于@McGuireV10建议的解决方案。