我正在编写一个ClickOnce WPF应用程序,有时会在VPN上使用。该应用程序只使用域认证用户可用的资源。其中一些内容包括访问SSRS报告、访问LDAP以查找用户信息、访问web服务等等。
当用户从未在域上进行身份验证的计算机登录时,我需要以某种方式获取他的凭据,在域上对他进行身份验证,并存储他的凭据。
我已经找到了几篇文章,但最近并没有太多的文章,很多解决方案似乎有点麻烦,或者不太安全(即在内存中存储字符串明文)。
如果我可以使用ActiveDicrtoryMembershipProvider,那将是很酷的,但这似乎适合在网络应用程序中使用。
编辑:以上是一种解决方法。用户必须输入其域凭据才能在VPN上进行身份验证。最好是访问用户已经输入的登录到VPN的凭据,而不是WindowsIdentity.GetCurrent() (后者返回登录到计算机的用户)。有什么办法吗?我们使用Juniper网络连接到VPN。
答案我最终基本上做了link below中建议的事情。当应用程序启动时,我将检测用户是否在域上。如果是这样,我将在调用服务时使用这些凭据。如果用户在VPN上(但不在域认证计算机上),我将提示用户的凭据并通过System.DirectoryServices进行身份验证。如果用户提供有效的凭据,我将将域、用户和密码存储在SecureString中。然后,应用程序使用这些信息创建凭据,以传递给各种服务。
谢谢!
发布于 2010-04-28 14:59:09
This answer对这个问题可能有帮助。
-编辑--
如果客户端在AD凭据下登录,则
WindowsIdentity。如果客户端未登录到域,则可以提供请求AD凭据的弹出。我只是在想..。
https://stackoverflow.com/questions/2730406
复制相似问题