繁体   English   中英

MS Exchange Web服务API和401未经授权的异常

[英]MS Exchange Web Service API and 401 unauthorized exception

我正在使用日历事件同步过程,但是停留在一个级别上,需要您的帮助,我正在使用以下方法来验证Web凭据

exchangeService.Credentials =新的WebCredentials(“ user @ domain”,“ pwd”);

通过使用此功能,我可以将日历应用程序与我的office365帐户同步。 但是配置其他Microsoft Exchange帐户时出现问题。

如何识别是否使用带域的用​​户名或不带域的用户名,因为Office365除外带域的用户名(电子邮件地址),而其他Microsoft Outlook Webapp则不需要。

exchangeService.Credentials =新的WebCredentials(“ user”,“ pwd”,“ domain”);

通过使用此问题可以解决,与交换服务器进行数据同步,但是问题是我们如何处理/检查是使用带域的用​​户名(用于Outlook.office365登录)还是不带域的用户名(用于Microsoft Outlook Webapp登录)

使用哪种条件/逻辑来标识它是office365还是其他域?

使用用户的UPN将同时适用于OnPremise和Office365,因此这是仅使用下级用户名使用其UPB的最佳方法,在Office365中不起作用https://msdn.microsoft.com/zh-cn/library/窗户/桌面/ aa380525(v = vs.85)的.aspx#down_level_logon_name

(不要将UPN与电子邮件地址混淆,它们通常是不同的OnPremise,而在Office365中通常是相同的)。

您还可以使用自动发现来检测用户是否正在使用Office365(但是仍然需要进行身份验证,例如

        AutodiscoverService adAutoDiscoverService = new AutodiscoverService(ExchangeVersion.Exchange2013_SP1);
        adAutoDiscoverService.Credentials = new NetworkCredential("UserName", "Password");
        adAutoDiscoverService.EnableScpLookup = false;
        adAutoDiscoverService.RedirectionUrlValidationCallback = adAutoDiscoCallBack;
        adAutoDiscoverService.PreAuthenticate = true;
        adAutoDiscoverService.TraceEnabled = true;
        adAutoDiscoverService.KeepAlive = false;            
        GetUserSettingsResponse gsp = adAutoDiscoverService.GetUserSettings("username@domain.com", UserSettingName.UserMSOnline);
        Object UserMSOnline = null;
        if (gsp.Settings.TryGetValue(UserSettingName.UserMSOnline, out UserMSOnline))
        {
            if ((String)UserMSOnline == "True")
            {
                Console.WriteLine("Office365");
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM