在 C# 中检索和使用服务 'Log on as' 凭据

Retrieve and use service 'Log on as' credentials in C#

我目前正在编写 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) 中有一些建议,我可以获取当前登录用户的凭据,但我查看了引用的代码示例,但没有找到任何关于如何做到这一点的建议.

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

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

@rene 提议的一个涉及使用 Microsoft CredentialCache 类型 return 当前登录用户的网络凭据,这在服务上下文中似乎只是 'log on as' 凭据。在此处找到详细信息:https://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials(v=vs.110).aspx

第二个是我发现的,它涉及简单地不向 EWS API ExchangeService 类型添加凭据,在这种情况下,用户的凭据 运行 服务将自动通过交换。