从Okta仪表板注销时使用户退出ASP.NET应用程序

问题描述

我们有一个使用Okta进行用户身份验证的ASP.NET MVC应用程序。

当未经身份验证的用户浏览到我们的应用程序时,他们将被重定向到Okta进行登录,然后被重定向回经过身份验证的应用程序。当他们在应用程序中单击“注销”时,他们将退出应用程序并退出Okta。

问题是当我们从Okta仪表板单击“注销”时。当用户从Okta仪表板单击“注销”时,他们将退出Okta,但未退出我们的应用程序。当用户在Okta中使用不同的凭据登录并打开应用程序时,HttpContext.User.Identity仍包含以前的用户信息。

是否可以进行设置,以便当用户单击Okta仪表板中的“注销”时,他们退出ASP.NET应用程序?最好的方法是什么?

解决方法

这是预期的行为,让我解释一下。

假设用户未登录Okta或您的应用程序。当用户访问您的应用程序并单击“登录”时,他们将被重定向到Okta进行身份验证。当他们向Okta进行身份验证时,将创建一个新的会话cookie,以便在Okta域中记住用户的身份(例如blah.okta.com)。

然后,将用户重定向回您的应用程序(yourwebsite.com),在该应用程序中,他们将具有访问令牌和一个新的会话cookie(在yourwebsite.com域上),这将使他们保持登录状态。 / p>

因此,目前有两个单独的会话处于活动状态:

  • 您域中的一个(yourwebsite.com
  • 一个在Okta的域(blah.okta.com)上

当用户注销Okta的仪表板时,这意味着他们的令牌被吊销并且会话cookie被删除(从Okta blah.okta.com域中)。但是,Okta无法从您的网站(yourwebsite.com)删除会话cookie。

因此,当您的用户在您的网站(yourwebsite.com)上进行操作时,该用户的浏览器将仍然将会话cookie发送到包含Okta访问令牌的后端。

然后...根据Web应用程序的配置方式,它将执行以下两项操作之一来验证令牌:

  • 它可以使用JSON Web令牌库在本地验证令牌(这是默认行为),在这种情况下,令牌仍然有效,因此用户被视为“已认证”,甚至可以继续执行操作尽管他们的令牌已被撤消。
  • 它可以根据Okta的授权服务器来验证令牌(这称为令牌自省),这有点慢,因为它需要对Okta的HTTP请求。如果这样做,则确实会将该用户识别为已注销,并且他们的会话将被破坏。

因此,基本上,要获得您正在谈论的行为,您需要修改Web应用程序验证用户令牌的方式。您需要从使用本地验证切换为令牌简介。

不幸的是,我们还没有 在我们的ASP.NET库中选择使用令牌自省。该库的作者刚刚将其添加到她的待办事项中=)