登录用户

时间:2009-09-10 21:53:10

标签: c# wcf security forms-authentication

我的公司有一个很大的应用程序,我们正在完成。它利用WCF作为Active Directory的骨干进行身份验证。这适用于两个站点之一,因为身份验证模型是Windows,您必须成为域的一部分才能登录该站点。我的问题涉及外部可访问的其他站点。它为具有特定用户/传递的代理调用设置ClientCredentials.Windows.ClientCredential以模拟AD用户,因此完整的安全模型可以正常工作。这一切都完全符合预期。

我的问题是,在网络上我可以使用HttpContext.Current.User.Identity.Name从Forms身份验证部分获取当前登录的用户,但要做到这一点,我必须确保一个System.Web对我目前正在使用的DLL存在引用。我们的基础对象来自一个不了解System.Web的简单类。有没有办法找出在该基础对象项目中登录的Forms用户?我尝试过System.Security.Principal,但这只能让我从我能说的内容中访问Windows帐户,并且不会对我有任何帮助。

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

2 个答案:

答案 0 :(得分:5)

Thread.CurrentPrincipal.Identity将与HttpContext.CurrentContext...

完全相同

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

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

答案 1 :(得分:2)

如果用户名作为字符串就足够了,

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

来自MSDN

  

获取启动当前线程的人员的用户名。