【问题标题】:Windows authentication - programmatically sign user out?Windows 身份验证 - 以编程方式注销用户?
【发布时间】:2019-01-02 08:01:47
【问题描述】:

如果我有一个使用 Windows 身份验证设置的 Asp.NET Core 2.1 网站,如何让使用 Windows 身份验证登录的用户退出?

我看到了this 的帖子,但它是在 2009 年被问到的。只是想知道现在是否可以退出 Windows 用户。

【问题讨论】:

  • “注销用户”究竟是什么意思? 用户 还没有从他的机器上注销。 Web 应用程序的“退出”意味着“终止会话”。问题是要求错误的东西
  • 您可以像在任何 Web 应用程序中一样终止用户会话。通过设置超时、通过用户的显式操作(例如单击Sign out 按钮)或通过关闭页面时的 Javascript 操作
  • 为什么您要询问有关退出 Windows 用户的问题?您要解决的实际问题是什么?存储sign out 日期?结束用户的会话?跟踪在线状态?还有什么?请记住,HTTP 是无状态,唯一跟踪登录/退出状态的是应用程序本身
  • @PanagiotisKanavos 我很好奇,因为使用该站点的用户有两个不同的窗口帐户:一个普通帐户,一个管理员帐户。我希望通过检测他们使用的帐户并说“嘿,这是错误的帐户,单击此处退出并使用正确的帐户重新登录”来让他们的生活更轻松。到目前为止,它确实显示了该消息,我只是希望通过再次提供登录屏幕来让他们更轻松。
  • 您是在询问 Windows 身份验证还是针对 AD 的表单身份验证?在第一种情况下,没有登录可以退出。第二种情况只是针对 AD 存储而不是数据库的表单身份验证。

标签: c# asp.net-core


【解决方案1】:

简短回答:不。

您需要使用Forms Authentication。自发布该问题以来,Windows Authetication 流程没有改变。

如果您不想迁移到表单身份验证,您可以通过在数据库中为该用户管理 logged on 布尔值然后返回 401 Unauthorized 来创建自己的“注销”表单。我强烈建议不要这样做,你应该实施Forms Authentication

【讨论】:

  • 没有什么可以退出的。用户尚未从 Windows 注销,因此任何打开 Web 应用程序的尝试始终有效。从 Web 应用程序中退出通常意味着“终止会话”
  • @PanagiotisKanavos 什么?还是可以这样处理的。您可以通过基于数据库值“登录”来阻止该用户的请求来在服务器端处理它。这只是一个糟糕的解决方案,不应该使用。
  • @Ridell 什么什么什么?这不是 Windows 身份验证 的工作方式。没有需要退出的“登录”。用户由 他/她 机器进行身份验证。令牌通过请求标头发送到服务器。服务器验证该令牌并检查它是否是允许的用户。
  • 屏蔽用户,为什么?并且持续多久?毕竟,请求已经通过了身份验证。
  • @PanagiotisKanavos 我确切地知道它是如何工作的。你显然不明白我在说什么。您仍然可以根据经过身份验证的请求呈现不同的页面。这是一种hacky方式,这就是我在答案中所说的。我发现你的 cmets 与这个问题的两个答案都无关。
【解决方案2】:

这仍然成立:

使用“Windows”时,服务器端的注销按钮将不起作用 验证。如果你想要一个,你必须使用“表单”身份验证 退出按钮,或关闭用户的浏览器。

因此,如果您希望能够注销用户,则需要使用不同形式的身份验证

【讨论】:

  • 没有什么可以退出的。用户尚未从 Windows 注销,因此任何打开 Web 应用程序的尝试始终有效。从 Web 应用程序中退出通常意味着“终止会话”
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多