Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制office 365应用程序的邮箱访问_C#_Azure_Oauth 2.0_Office365_Imap - Fatal编程技术网

C# 如何限制office 365应用程序的邮箱访问

C# 如何限制office 365应用程序的邮箱访问,c#,azure,oauth-2.0,office365,imap,C#,Azure,Oauth 2.0,Office365,Imap,我试图找出如何限制应用程序可以访问哪个邮箱 我遵循了本指南并使用了仅应用程序身份验证: 根据文档,我必须将“完全访问权限”设置为“应用程序””权限。 然而,信息文本指出: “允许应用通过Exchange Web服务完全访问所有邮箱,而无需登录用户。” 我可以读取邮箱,但我想限制应用程序可以访问的邮箱。 谁能给我指出正确的方向吗 多谢各位 我的代码: static async System.Threading.Tasks.Task Main(string[] args) {

我试图找出如何限制应用程序可以访问哪个邮箱

我遵循了本指南并使用了仅应用程序身份验证:

根据文档,我必须将“完全访问权限”设置为“应用程序””权限。 然而,信息文本指出: “允许应用通过Exchange Web服务完全访问所有邮箱,而无需登录用户。”

我可以读取邮箱,但我想限制应用程序可以访问的邮箱。 谁能给我指出正确的方向吗

多谢各位

我的代码:

   static async System.Threading.Tasks.Task Main(string[] args)
    {
        // Using Microsoft.Identity.Client 4.22.0
        var cca = ConfidentialClientApplicationBuilder
            .Create(ConfigurationManager.AppSettings["appId"])
            .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"])
            .WithTenantId(ConfigurationManager.AppSettings["tenantId"])
            .Build();

        var ewsScopes = new string[] { "https://outlook.office365.com/.default" };

        try
        {
            var authResult = await cca.AcquireTokenForClient(ewsScopes)
                .ExecuteAsync();

            // Configure the ExchangeService with the access token
            var ewsClient = new ExchangeService
            {
                Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),
                Credentials = new OAuthCredentials(authResult.AccessToken),
                ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "emailaddress@domain.com")
            };

            var mailbox = new Mailbox("emailaddress@domain.com");
            var folderId = new FolderId(WellKnownFolderName.Inbox, mailbox);

            var inbox = Folder.Bind(ewsClient, folderId);

            if (inbox != null)
            {
                FindItemsResults<Item> items = inbox.FindItems(new ItemView(100));

                foreach (var item in items)
                {
                    Console.WriteLine(item.Subject);
                }
            }
        }
        catch (MsalException ex)
        {
            Console.WriteLine($"Error acquiring access token: {ex}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex}");
        }

        if (System.Diagnostics.Debugger.IsAttached)
        {
            Console.WriteLine("Hit any key to exit...");
            Console.ReadKey();
        }
    }
static async System.Threading.Tasks.Task Main(字符串[]args)
{
//使用Microsoft.Identity.Client 4.22.0
var cca=机密客户端应用程序生成器
.Create(ConfigurationManager.AppSettings[“appId”])
.WithClientSecret(ConfigurationManager.AppSettings[“clientSecret”])
.WithTenantId(ConfigurationManager.AppSettings[“tenantId”])
.Build();
var ewscopes=新字符串[]{”https://outlook.office365.com/.default" };
尝试
{
var authResult=等待cca.AcquireTokenForClient(EWSCOPES)
.ExecuteAsync();
//使用访问令牌配置ExchangeService
var ewsClient=新的ExchangeService
{
Url=新Uri(“https://outlook.office365.com/EWS/Exchange.asmx"),
凭据=新的OAuthCredentials(authResult.AccessToken),
ImpersonatedUserId=新的ImpersonatedUserId(ConnectingIdType.SmtpAddress,“emailaddress@domain.com")
};
var mailbox=新邮箱(“emailaddress@domain.com");
var folderId=新的folderId(WellKnownFolderName.Inbox,邮箱);
var inbox=Folder.Bind(ewsClient,folderId);
如果(收件箱!=null)
{
FindItemsResults items=inbox.FindItems(新项目视图(100));
foreach(项目中的var项目)
{
Console.WriteLine(项目主题);
}
}
}
渔获物(MSAlexex)
{
WriteLine($“获取访问令牌时出错:{ex}”);
}
捕获(例外情况除外)
{
WriteLine($“错误:{ex}”);
}
if(System.Diagnostics.Debugger.IsAttached)
{
控制台。WriteLine(“按任意键退出…”);
Console.ReadKey();
}
}
您可以跟随

尽管本文档位于Microsoft Graph下,但它也应适用于
https://outlook.office365.com
模块,因为此设置用于应用程序注册和O365邮箱

您需要创建一个应用程序访问策略,设置
-AccessRight RestrictAccess

然后测试新创建的应用程序访问策略,该策略限制对用户的访问
user1@contoso.com

Test-ApplicationAccessPolicy -Identity user1@contoso.com -AppId e7e4dbfc-046-4074-9b3b-2ae8f144f59b

这基本上是一个,而不是一个编程问题,这些都是离题的。您必须询问Microsoft如何配置该Outlook帐户。@arnt,我同意这不仅仅是一个编程问题,而是一个关于如何使用Office365(Exchange Online)API的问题。它是一个编程接口,因此也不是“询问Microsoft如何配置Outlook帐户”的问题。让我们看看是否有人曾经使用过这个API,并且了解它是如何工作的,或者可以为他指出正确的方向。您添加到“支持问题”的链接甚至说:“我们在这里是为了帮助您解决编写代码的难题。如果代码涉及某个公司的API,那很好。我们非常乐意在这方面帮助您。”@roberth FYI,我有,我确实理解。