如何限制Office 365 应用程序的邮箱访问

How to restrict mailbox access for office 365 app

我正在研究如何限制应用程序可以访问的邮箱。

我已遵循本指南并使用了仅限应用程序的身份验证:https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

根据文档,我必须设置“full_access_as_app”权限。 然而,信息文本指出: “允许应用程序在没有登录用户的情况下通过 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();
        }
    }

你可以关注Scoping application permissions to specific Exchange Online mailboxes.

虽然这个文档在Microsoft Graph下,但它应该也适用于https://outlook.office365.com模块,因为这个设置是针对应用程序注册和O365邮箱的。

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

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

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