【问题标题】:Sign Users Out of ASP.NET Application When They Logout From Okta Dashboard当用户从 Okta 仪表板注销时,将用户从 ASP.NET 应用程序中注销
【发布时间】:2021-01-16 09:41:42
【问题描述】:

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

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

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

是否可以进行设置,使得当用户在 Okta 仪表板中单击“注销”时,他们退出了 ASP.NET 应用程序?完成此任务的最佳方法是什么?

【问题讨论】:

    标签: asp.net-mvc oauth-2.0 okta


    【解决方案1】:

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

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

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

    所以此时,有两个单独的会话处于活动状态:

    • 您的域中的一个 (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 应用程序验证用户令牌的方式。您需要从使用 LOCAL VALIDATION 切换到 TOKEN INTROSPECTION。

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

    【讨论】:

    • 感谢您的回复@rdegges,很高兴看到这已成为待办事项,因为它在这个库中非常有用!在我们的用例中,客户端控制我们域之外的 Okta 配置,考虑到这一点是否仍然可以使用令牌自省(即它是否需要 API 令牌)?你有什么资源可以告诉我如何实现令牌自省吗?
    • 嘿!以下是令牌自省的 API 文档:developer.okta.com/docs/reference/api/oidc/#introspect 您需要查询端点的唯一“凭据”是您的客户端凭据(又名:客户端 ID + 密码),所以您应该很好!
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多