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

本文关键字:登录 身份 登录身份 凭据 服务 检索 | 更新日期: 2023-09-27 18:31:04

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

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

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

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

@rene提出的一种方法是使用 Microsoft CredentialCache 类型返回当前登录用户的网络凭据,在服务上下文中,该凭据似乎只是"登录身份"凭据。详细信息可在此处找到:https://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials(v=vs.110).aspx

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