【问题标题】:System.Security.Principal.WindowsIdentity and WinForms AuthenticationSystem.Security.Principal.WindowsIdentity 和 WinForms 身份验证
【发布时间】:2010-11-04 13:58:44
【问题描述】:

我想利用 Windows 身份验证模型对使用我的 C# 3.5 WinForms 应用程序的用户进行身份验证:

  1. 已登录 Windows 的用户会自动登录到我的应用程序。
  2. 如果用户想明确登录,他的用户名和密码应该由 Windows 检查,或者更好的是,由 Windows 用标准的 Windows Dialog 提示。结果应该是另一个 WindowsIdentity 对象。

第一个很久以前很容易解决:我看过

WindowsIdentity identity = WindowsIdentity.GetCurrent();

为了确定,我检查了

if (identity.IsAuthenticated) { ... }

对于第二种情况,我在其他 SO Q&A 中发现了一些 API 调用,但我很确定必须有一种托管方式,我错了吗?

此外,我想知道我对 1. 的方法是否节省且适当。感谢您的反馈!

更新:根据 Ivan 的说法,我必须使用 P/Invoke 方法。这基本上没问题,但是我仍然需要一种方法来检索某个用户的WindowsIdentity 对象,该用户的IsAuthenticated 属性设置为true。 P/Invoke 调用本身不返回这样的对象。 如何做到这一点?

【问题讨论】:

  • 我不确定你为什么要做第二件事。您是否希望用户以不同于他们登录时的用户身份运行?
  • @giltanis:是的,如果用户想使用与当前登录 Windows 不同的帐户,我希望用户能够通过用户名和密码进行身份验证。

标签: c# winforms .net-3.5 windows-authentication


【解决方案1】:

我对此不确定,但您似乎想使用带有 IntPtr 的 WindowsIdentity Ctor。要获取传递给此构造函数的参数,您可以 PInvoke Win32 API LogonUser() 函数。这将为您提供该用户的 WindowsIdentity。

【讨论】:

    【解决方案2】:

    没有管理方法可以做到这一点,您必须按照您所说的进行 pinvoke(api 调用)。方法 #1 完全没问题……相信微软 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-12
      • 2015-02-02
      • 2018-02-24
      • 1970-01-01
      • 2018-09-14
      • 2015-08-10
      • 2012-10-14
      • 2011-01-28
      相关资源
      最近更新 更多