gpt4 book ai didi

c# - 通过 WCF 服务传递 NetworkCredential 以与 EWS API 一起使用

转载 作者:行者123 更新时间:2023-11-30 22:19:45 24 4
gpt4 key购买 nike

我有一个正在运行的 WCF 服务,托管在 IIS7 上,它使用 netTcp 端点公开,并使用 Windows 身份验证(Transport 安全和 clientCredentialType="Windows")进行配置,这一切工作正常。

在服务中,我使用 EWS API 发送电子邮件,并检查 Exchange 服务器上的收件箱。我有部分工作,就目前的开发而言,我已经通过创建 NetworkCredential 手动指定了 Credentials 属性。要传入的对象。

但我想做的是使用调用该服务的用户的身份,这样我就可以像他们一样发送邮件并遍历他们的收件箱。

我可以通过使用访问调用用户的详细信息

ServiceSecurityContext.Current.PrimaryIdentity

但这会返回一个 IIdentity对象,而不是创建到 Exchange 服务器的连接所需的凭据。

我显然不能创建 NetworkCredential没有密码的对象,我没有密码,据我所知,我无法创建 NetworkCredential来自 IIdentity对象。

必须有一种方法可以实现这一点。欢迎所有建议。

最佳答案

关于

using(ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
ExchangeService service = new ExchangeService(...)
service.UseDefaultCredentials = true;

}

调用您的服务器的客户端必须允许委托(delegate):

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;

如果您的 WCF 服务器使用 localSystem 或 NetworkService 帐户运行,您还需要在 AD 中为您的计算机帐户启用“Trusted for delegation”属性(通常是网络管理员的工作)。如果它使用另一个域用户帐户运行,则需要为该帐户启用“Trusted for delegation”属性并为您的服务器创建服务器主体名称 (SPN)。老实说,我自己从来没有这样做过,因为我更喜欢使用 NetworkService 帐户。她来了几个链接:Here , here , and here

关于c# - 通过 WCF 服务传递 NetworkCredential 以与 EWS API 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com