2009-09-10 165 views
2

我的公司有一个大型应用程序,我们正在完成。它利用WCF作为Active Directory的后台进行身份验证。由于身份验证模型是Windows,因此这对于这两个站点中的一个非常适用,并且您必须成为登录到站点的域的一部分。我所关心的问题涉及到可从外部访问的其他站点。它将ProxyCredentials.Windows.ClientCredential设置为具有特定用户/密码的代理呼叫,以模拟AD用户,以使完整的安全模型可以正常工作。这一切都与预期完全一样。获取登录用户

我的问题是,在网上我可以使用HttpContext.Current.User.Identity.Name从Forms身份验证片获取当前登录的用户,但要做到这一点,我必须确保一个系统。 Web引用是针对我目前工作的DLL而存在的。我们的基础对象来自一个不了解System.Web的简单类。有没有办法找出在该基础对象项目中登录的Forms用户?我尝试了System.Security.Principal,但是只能让我从我所能告诉的Windows帐户访问,并且对我没有任何好处。

我知道一个选择就是引用System.Web并完成它,但是这听起来对我来说真的很糟糕,而不是最好的选择,所以我希望在这里有一些提示。

回答

4

Thread.CurrentPrincipal.Identity会做同样的事情HttpContext.CurrentContext...

它将返回与当前执行的线程相关联的身份,在大多数情况下,是登录的用户*。

注意:*如果您使用委托/模拟或作为服务帐户运行,它将返回线程所在的帐户,但在您的情况下,听起来不像您正在执行的任何操作上下文身份切换。

+0

完美。正是我在找什么。 – RubyHaus

2

如果用户名作为字符串是够你

Environment.UserName 
// Environment.UserDomainName and MachineName can also be useful 

MSDN

获取谁开始的当前线程的人的用户名。