如何在wcf中获取当前的Windows用户

时间:2012-06-21 03:46:46

标签: wcf-security

我已经尝试过link from stackoverflow

我有一个silverlight客户端和wcf服务。该应用程序有3种身份验证模式

  1. Active Directory
  2. Windows Pass Through
  3. 专有 - 我显然没有这个问题。 (我真的不知道活动目录和Window Pass Through之间有什么区别。我只使用相同的代码,除了Windows传递我得到当前用户和AD应用提示输入用户名密码)
  4. private string GetCurrentUser()
    {
        try
        {
            string result = WindowsIdentity.GetCurrent().Name;
            WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            result = wp.Identity.Name;
            if (result.Contains(@"\"))
            {
                int position = result.LastIndexOf(@"\") + 1;
                result = result.Substring(position);
            }
            return result;
        }
        catch (Exception ex)
        {
            return "";
        }
    }
    

    WindowsIdentity和WindowsPrincipal都返回'DefaultAppPool'或当前线程运行的AppPool。甚至Environment.UserName也会返回相同的内容。

    当我在web.config中打开<identity impersonate ="true"/>时,silverlight客户端无法连接到wcf。它会出现“未找到”错误。所以,我需要保留<identity impersonate ="false"/>

    我所需要的只是当前登录的用户,我不知道这很难。

1 个答案:

答案 0 :(得分:0)

我将应用程序池上的标识更改为我自己的用户帐户,但它确实有效。

  1. 打开IIS控制台
  2. 选择应用程序池。
  3. 选择AppPool(在我的情况下是DefaultAppPool)。
  4. 在右侧窗格中,单击“高级设置”。
  5. 有一些不同类别的设置,如常规,CPU,流程模型。
  6. 在流程模型下 - &gt;单击右侧输入框,单击一个按钮,单击它。
  7. 打开一个对话框,其中包含2个单选按钮(内置帐户和自定义帐户)。
  8. 选择自定义帐户,然后点击设置。
  9. 将打开“设置凭据”对话框。
  10. 输入您的凭据并点击即可。您可能必须输入[域名] [用户名]
  11. 点击Ok以显示所有对话框以关闭所有内容。
  12. 现在测试您的应用程序,WindowsIdentity.GetCurrent()。名称应返回与应用程序池关联的用户名。