我正在编写一个有时会在VPN上使用的ClickOnce WPF应用程序。该应用程序仅使用可用于域身份验证用户的资源。其中一些包括访问SSRS报告,访问LDAP以查找用户信息,访问Web服务等等。
当用户从未在域上进行身份验证的计算机登录时,我需要以某种方式获取其凭据,在域上对其进行身份验证并存储其凭据。
我发现了几篇文章,但最近发布的内容并不多,而且很多解决方案看起来有点笨拙,或者不太安全(即 - 在内存中存储字符串明文)。
如果我可以使用ActiveDicrtoryMembershipProvider会很酷,但这似乎适合在网络应用中使用。
修改 以上是一种解决方法。用户必须输入其域凭据才能在VPN上进行身份验证。理想的情况是访问用户已登录的VPN以登录VPN而不是WindowsIdentity.GetCurrent()(返回登录到计算机的用户)。有关如何运作的任何想法?我们使用Juniper Networks连接到VPN。
答案 我最终基本上完成了link below中建议的内容。当应用程序启动时,我将检测用户是否在域中。如果是这样,我将在调用服务时使用这些凭据。如果用户在VPN上(但不在域认证的计算机上),我会提示用户的凭据并通过System.DirectoryServices进行身份验证。如果用户提供有效凭据,我会将域,用户和密码存储在SecureString中。然后,应用程序使用该信息创建凭据以传递给各种服务。
谢谢!
答案 0 :(得分:1)
This answer这个问题可能有所帮助。
<强> - 编辑 - 强>
如果客户端使用其AD凭据进行日志记录,则WindowsIdentity.GetCurrent()
将返回有效的WindowsIdentity
。
如果客户端未登录到域,则可以提供要求提供AD凭据的弹出窗口。
好吧,只是想......