【问题标题】:how to get current windows user in wcf如何在wcf中获取当前windows用户
【发布时间】:2016-03-11 09:44:24
【问题描述】:

我已经试过link from stackoverflow

我有一个 silverlight 客户端和 wcf 服务。应用有3种认证方式

  1. 活动目录
  2. Windows 直通
  3. 专有的 - 我对这个显然没有问题。 (我真的不知道活动目录和窗口传递有什么区别。我只是对两者使用相同的代码,除了窗口传递我得到当前用户和 AD 应用程序提示输入用户名密码)李>

.

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"/>

我只需要当前登录的用户,没想到这么难。

【问题讨论】:

  • 我也遇到了同样的问题(虽然它不是 Silverlight 应用程序) - 你解决了吗?
  • 请查看答案,我刚刚更新了。

标签: wcf-security


【解决方案1】:

我将应用程序池中的身份更改为我自己的用户帐户,并且成功了。

  1. 打开 IIS 控制台
  2. 选择应用程序池。
  3. 选择 AppPool(在我的例子中是 DefaultAppPool)。
  4. 在右侧窗格中单击高级设置。
  5. 有不同类别的设置,例如常规、CPU、进程模型。
  6. 在Process Model -> Identity下点击右侧输入框,出现一个按钮,点击。
  7. 它会打开一个带有 2 个单选按钮(内置帐户和自定义帐户)的对话框。
  8. 选择自定义帐户并点击设置。
  9. 设置凭据对话框打开。
  10. 输入您的凭据并点击确定。您可能需要输入 [域][用户名]
  11. 在所有对话框中单击“确定”以关闭所有内容。
  12. 现在测试您的应用,WindowsIdentity.GetCurrent().Name 应该返回与应用程序池关联的用户名。

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2010-11-13
    • 2023-03-31
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多