Asp.net mvc 5 ASP.NET MVC 5使用联合身份验证Azure AD发送电子邮件

Asp.net mvc 5 ASP.NET MVC 5使用联合身份验证Azure AD发送电子邮件,asp.net-mvc-5,exchangewebservices,federated-identity,azure-active-directory,Asp.net Mvc 5,Exchangewebservices,Federated Identity,Azure Active Directory,我花了好几个小时想弄明白,希望有人能帮上忙。用户使用Azure AD Microsoft组织帐户对我们的ASP.NET站点进行身份验证。理想情况下,我希望能够连接到ExchangeWeb服务,但我无法确定如何传递凭据。通过搜索,我发现无法从User.Identity获取密码 我对Pop或IMAP也有同样的问题 此代码正在返回无法找到的自动发现服务 如果我明确告诉它服务器名称,我会得到一个错误 ExchangeService service = new ExchangeService(Exchan

我花了好几个小时想弄明白,希望有人能帮上忙。用户使用Azure AD Microsoft组织帐户对我们的ASP.NET站点进行身份验证。理想情况下,我希望能够连接到ExchangeWeb服务,但我无法确定如何传递凭据。通过搜索,我发现无法从User.Identity获取密码

我对Pop或IMAP也有同样的问题

此代码正在返回无法找到的自动发现服务 如果我明确告诉它服务器名称,我会得到一个错误

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;
        }

您的应用程序无权访问用户的凭据。这是联邦身份验证的前提。Azure AD对用户进行身份验证并发出SAML/JWT令牌,您的应用程序将验证并在用户中签名底层身份框架可能正在为您执行这项工作

也就是说,您的应用程序可以从Azure AD获取一个委托令牌,以代表已登录用户访问Office365 API,并代表他们向日历发送电子邮件/写操作。以下文档将逐步指导您,包括visual studio示例:

更新链接:

用户体验类似于:用户单击应用程序上的登录按钮。您的应用程序确定用户需要登录Azure AD,并使用SSO+委托令牌请求将用户的代理重定向到Azure AD。用户将看到一个同意页面,上面写着:应用程序希望代表您访问您的电子邮件。用户授予同意并登录。AAD将用户代理重定向回您的应用程序,其中包含一个指向SSO应用程序的id令牌,以及一个授权码,您的应用程序可以将该授权码兑换为指向Exchange Online的访问令牌以发送电子邮件


希望这有帮助。

太好了,谢谢!我会看看是否能用新链接编辑答案。