使用 AD 用户连接到 Exchange(单点登录)

Connect to Exchange with AD User (Single Sign On)

目前我有一个带有用户名 (logonParamters.Username) 和密码 (logonParameters.Password) 字段的登录表单。 下面的代码工作正常,但它假定我有连接到 Exchange 的密码。但是我们想使用单点登录,如果我们这样做,我们没有密码,对吗?但 EWS 需要用户名、密码和域。那么如何使用 SSO 连接到 Exchange?

            var domain = logonParameters.UserName.Split('\').First();
            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
                {
                // validate the credentials
                var username = logonParameters.UserName.Split('\').Last();
                bool isValid = pc.ValidateCredentials(username, logonParameters.Password);
                if (!isValid)
                    {
                    //throw exception
                    }
                using (UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, username))
                    {                      
                    //Connect to ExchangeWebService with those AD Credentials.
                    }
                }

在 EWS Managed API(或 WSDL 代理)中,您可以使用当前的安全上下文(例如登录用户凭据),例如

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2016);
service.UseDefaultCredentials = true;

这意味着在模拟上下文中将其获取到 运行,并在可能的情况下依靠 kerberos 进行身份验证。