在 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) 有一些建议,我可以获取当前登录用户的凭据,但我查看了引用的代码示例,找不到关于这如何可行的建议。
为了清楚起见,我可以得到用户名,这很好。我需要密码...任何帮助将不胜感激!
似乎有两个可以接受的答案:
@rene提出的一种方法是使用 Microsoft CredentialCache 类型返回当前登录用户的网络凭据,在服务上下文中,该凭据似乎只是"登录身份"凭据。详细信息可在此处找到:https://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials(v=vs.110).aspx
第二个是我发现的,它涉及简单地不向 EWS API ExchangeService 类型添加凭据,在这种情况下,运行该服务的用户的凭据将自动传递到 Exchange。