0

我已经花了几个小时试图解决这个问题,我希望有人能提供帮助。用户使用 Azure AD(Microsoft 组织帐户)向我们的 ASP.NET 站点进行身份验证。理想情况下,我希望能够与 Exchange Web 服务连接,但我无法弄清楚如何传递凭据。通过搜索,我发现无法从 User.Identity 获取密码。

我在使用 Pop 或 IMAP 时遇到了同样的问题。

此代码返回“无法定位自动发现服务”如果我明确告诉它服务器名称,我会收到 401 未经授权的错误

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl(User.Identity.Name, RedirectionUrlValidationCallback);

        private static bool RedirectionUrlValidationCallback(string redirectionUrl)
        {
            // The default for the validation callback is to reject the URL.
            bool result = false;

            Uri redirectionUri = new Uri(redirectionUrl);

            // Validate the contents of the redirection URL. In this simple validation
            // callback, the redirection URL is considered valid if it is using HTTPS
            // to encrypt the authentication credentials. 
            if (redirectionUri.Scheme == "https")
            {
                result = true;
            }
            return result;
        }
4

1 回答 1

0

您的应用程序无权访问用户的凭据。这是联合身份验证的前提。Azure AD 对用户进行身份验证并发出 SAML/JWT 令牌,您的应用程序将验证该令牌并登录用户(底层身份框架可能正在为您完成这项工作)。

也就是说,您的应用程序可以从 Azure AD 获取委托令牌,以代表登录用户访问 Office365 API,并代表他们向日历发送电子邮件/写入。以下文档将逐步指导您(包括 Visual Studio 示例): http: //msdn.microsoft.com/en-us/library/office/dn605893 (v=office.15).aspx

更新链接: https ://msdn.microsoft.com/en-us/office/office365/howto/starter-projects-and-code-samples

用户体验将类似于:用户单击应用程序上的登录按钮。你的应用程序确定用户需要在 Azure AD 上登录,并使用 SSO+委派令牌请求将用户的代理重定向到 Azure AD。用户将看到一个“同意”页面,上面写着:应用程序想要代表您访问您的电子邮件。用户同意并登录。AAD 将用户代理重定向回您的应用程序,其中包含一个 id 令牌(发送给您的应用程序以进行 SSO)和一个您的应用程序可以兑换访问令牌的授权码(发送给 Exchange Online)发送电子邮件。

希望这可以帮助。

于 2014-05-09T18:07:15.420 回答