我正在开发一个需要定期访问 Outlook 365 收件箱的 AWS Lambda 函数。我正在使用 Graph API 访问收件箱。
我使用 Azure Active Directory 管理中心创建了一个新的 Azure AD Web 应用程序注册。(https://aad.portal.azure.com/) 在为我的应用程序分配 API 权限时,我可以选择在委派权限和应用程序权限之间进行选择。我无法使用委派权限,因为我的代码将在没有任何用户交互的情况下运行。
在选择应用程序权限时,我找不到将权限限制为一个用户帐户的方法。例如,如果我尝试授予应用程序 Mail.Read 应用程序权限,它将获得对企业中所有邮箱的访问权限。或者我对权限描述的理解有误。
如何将我的应用 API 权限授予一个用户的邮箱?
答案 0 :(得分:1)
Shiva 的评论解决了这个问题,添加它作为结束问题的答案:
某些应用使用自己的身份而不是代表用户调用 Microsoft Graph。例如,Mail.Read 应用程序权限允许应用程序在没有登录用户的情况下读取所有邮箱中的邮件。
Configuring ApplicationAccessPolicy 用于限制应用访问一组特定的邮箱。
1.连接到 Exchange Online PowerShell
Connect-ExchangeOnline -UserPrincipalName <UPN> [-ExchangeEnvironmentName <Value>] [-DelegatedOrganization <String>] [-PSSessionOption $ProxyOptions]
2.确定应用的客户端 ID 和启用邮件的安全组以限制应用访问。
3. 创建应用程序访问策略。
New-ApplicationAccessPolicy -AppId e7e4dbfc-046f-4074-9b3b-2ae8f144f59b -PolicyScopeGroupId EvenUsers@contoso.com -AccessRight RestrictAccess -Description "Restrict this app to members of distribution group EvenUsers."
有关 New-ApplicationAccessPolicy
的更多详细信息,请参阅 here。
答案 1 :(得分:0)
谢谢 Shiva 和 Pamela。我将为偶然发现此线程的其他人详细说明这些步骤。
创建启用邮件的群组:
注册和配置新应用:
限制应用访问:
在 Exchange 管理员的 Windows 计算机上使用提升的权限打开 PowerShell。
允许执行由受信任发布者签名的脚本。使用以下命令执行此操作。
Set-ExecutionPolicy RemoteSigned
使用以下命令安装 EXO (ExchangeOnline) V2 模块。
Install-Module -Name ExchangeOnlineManagement
加载 EXO V2 模块。
Import-Module ExchangeOnlineManagement
使用管理员帐户连接到 Exchange Online PowerShell。
Connect-ExchangeOnline -UserPrincipalName admin-account@yourorg.com
这应该会打开一个 SSO 对话框。使用管理员帐户登录。
下一步,我们需要在第 4 步中创建的群组电子邮件地址和在第 13 步中创建的应用客户端 ID。
使用以下命令将应用的 API 权限限制为仅限群组成员。
New-ApplicationAccessPolicy -AppId client-id-from-step-13 -PolicyScopeGroupId group-email-from-step-4@yourorg.com -AccessRight RestrictAccess -Description "Restrict app to group Legal Inbox."
就是这样!对应用程序访问策略的更改最多可能需要 30 分钟才能在 Graph REST API 调用中生效。
退出 ExchangeOnline PowerShell。
Disconnect-ExchangeOnline