如何限制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
我正在研究如何限制应用程序可以访问的邮箱。
我已遵循本指南并使用了仅限应用程序的身份验证: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