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

标签 asp.net-mvc identityserver4

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

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

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

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

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

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

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

有什么想法吗?

最佳答案

正如 McGuireV10 提到的,您可以在此处从客户端使用提示=无方法。您在隐藏的 iframe 中发出授权端点请求,如果响应返回正常(即不是 login_required),那么您就知道用户已经在 IDP 上进行了身份验证。实现起来有点麻烦,但它是一种“官方”方法,并且构成 session 监控规范的一部分。

关于asp.net-mvc - 检测 IdentityServer 用户是否在匿名用户可用的页面上登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656409/

相关文章:

c# - ASP.NET MVC 提交按钮单击未触发

c# - 未知客户端或客户端未启用 Identity Server 4

identityserver4 - 使用 Identity Server 进行配置文件管理

identityserver4 - OIDC 隐式流 - 重定向 uri 长度

c# - Azure 上 IdentityServer 的部署问题

asp.net-core - IdentityServer4 和用户管理

asp.net-mvc - Razor Html.Raw 无法呈现 ViewModel 数据

asp.net-mvc - 由于输入文本框的过滤而导致绑定(bind)列表发生更改时, Angular 分页不会更新

asp.net-mvc - 在 asp.net MVC4 中动态加载 css 文件

asp.net-mvc - 多个 SharePoint 应用程序指向同一个 MVC 项目