Azure Graph API - 检查用户是否具有对O365邮箱的完全访问权限

时间:2016-04-13 10:25:58

标签: c# azure office365 azure-ad-graph-api

我使用Microsoft的ActiveDirectory GraphClient库来访问Azure AD。

我的问题是:

我想知道 IUser对象是否具有对其他用户的Office 365邮箱的完全访问权限。

void bool HasFullAccess(IActiveDirectoryClient client, IUser currentUser, IUser otherUser)
{
    if (currentUser.ObjectId == otherUser.ObjectId)
    {
        return true;
    }

    //TODO: HOW-TO CHECK IF 'currentUser' HAS FULL ACCESS
    //      TO MAILBOX OF 'otherUser'
}

2 个答案:

答案 0 :(得分:0)

非常好的问题,您希望根据您的情况同时查看full_access_as_userfull_access_as_app。获得用户的访问令牌后,您应该查看Outlook REST API中记录的一些API调用。

答案 1 :(得分:0)

有两种方法可以检查用户是否可以访问其他用户的邮箱:

  1. EWS托管API

    如果您有权访问其他用户的邮箱,则可以通过以下方式获取数据:

        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    
        service.Credentials = new WebCredentials("user_with_access@example.com", "PASSWORD");
    
        service.TraceEnabled = true;
        service.TraceFlags = TraceFlags.All;
    
        service.AutodiscoverUrl("user_with_access@example.com", RedirectionUrlValidationCallback);
    
        var userMailbox = new Mailbox("target_user@example.com");
        var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox);
    
        var itemView = new ItemView(20);   // page size
        var userItems = service.FindItems(folderId, itemView);
    
        foreach (var item in userItems)
        {
            // do something with item (nb: it might not be a message)
        }
    

    以上代码需要用户的凭证。如果您无权访问目标用户的邮箱,则上面的代码会抛出错误,例如“流程未能获得正确的属性”。

  2. PowerShell的

    通过运行Get-MailboxPermission cmdlet,您可以检查哪个用户/邮箱具有访问Exchange中其他邮箱的权限类型:

    Get-Mailbox <Mailbox> | Get-MailboxPermission -User <AD User>
    

    您可以调用powershell在您的应用程序中进行检查。