在C#中检索并使用服务“以身份登录”凭据

时间:2016-01-20 10:28:19

标签: c# windows-services wmi

我目前正在编写一个Windows服务,需要与内部部署的Exchange服务器进行交互。非常正确,我们得出的结论是,对Exchange凭据进行硬编码是一个非常糟糕的主意,但是将它们以纯文本形式存储在配置文件中也是如此。我们得出结论,创建一个拥有相关邮箱的服务帐户应该满足我们的要求,但是我遇到了以下问题:

我已经开始使用ManagementObjectSearcher获取在我的PC上运行服务的帐户的用户名,但是我不确定如何,或者即使我可以获取密码。我试过这个:

    class Program
{

    public static ManagementObjectSearcher Searcher = new ManagementObjectSearcher(new SelectQuery("select * from Win32_Service where name = 'netlogon'"));

    static void Main(string[] args)
    {

        ManagementObjectCollection Response = Searcher.Get();

        Console.WriteLine(Response.Count);

        foreach (ManagementObject Item in Response)
        {
            Console.WriteLine(Item.ToString());
        }

        Console.ReadLine();
    }

}

不幸的是,我没有收回密码。 EWS API文档(https://msdn.microsoft.com/en-us/library/office/dn626019(v=exchg.150).aspx)中有一些建议我可以获取当前登录用户的凭据,但我查看了引用的代码示例,并且没有找到这样做的建议。

为清楚起见,我可以获得用户名,这很好。我需要密码......任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

似乎有两个可接受的答案:

@rene建议使用Microsoft CredentialCache类型来返回当前登录用户的网络凭据,这在服务上下文中似乎只是“登录为”凭据。详情请点击此处:https://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials(v=vs.110).aspx

第二个是我发现的,它只涉及不向EWS API ExchangeService类型添加凭据,在这种情况下,运行该服务的用户的凭据将自动传递到Exchange。