是否可以将 Azure AD Web 应用程序的应用程序 API 权限限制为一个帐户?

时间:2021-03-19 11:40:44

标签: azure azure-active-directory microsoft-graph-api azure-ad-graph-api outlook-graph-api

我正在开发一个需要定期访问 Outlook 365 收件箱的 AWS Lambda 函数。我正在使用 Graph API 访问收件箱。

我使用 Azure Active Directory 管理中心创建了一个新的 Azure AD Web 应用程序注册。(https://aad.portal.azure.com/) 在为我的应用程序分配 API 权限时,我可以选择在委派权限和应用程序权限之间进行选择。我无法使用委派权限,因为我的代码将在没有任何用户交互的情况下运行。

在选择应用程序权限时,我找不到将权限限制为一个用户帐户的方法。例如,如果我尝试授予应用程序 Mail.Read 应用程序权限,它将获得对企业中所有邮箱的访问权限。或者我对权限描述的理解有误。

如何将我的应用 API 权限授予一个用户的邮箱?

Azure AD App API Permissions

2 个答案:

答案 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。我将为偶然发现此线程的其他人详细说明这些步骤。

创建启用邮件的群组:

  1. 登录https://admin.microsoft.com/
  2. 点击组 > 活动组。
  3. 点击添加组并选择启用邮件的安全性。
  4. 提供群组名称和群组电子邮件地址。
  5. 将共享的合法邮箱作为成员添加到这个新创建的群组中。

注册和配置新应用:

  1. 登录https://aad.portal.azure.com/
  2. 单击 Azure Active Directory。这应该会将您带到贵组织的目录。
  3. 点击应用注册。
  4. 点击新注册。
  5. 为应用提供一个名称。
  6. 选择支持的帐户类型为单租户。
  7. 提供重定向 URI (web) 作为 https://login.microsoftonline.com/common/oauth2/nativeclient
    • 这对您的应用来说可能无关紧要,但需要提供重定向 URI。
  8. 点击注册。请复制并存储应用程序(客户端)ID 和目录(租户)ID。
  9. 点击 API 权限,然后点击添加权限。
  10. 选择 Microsoft Graph,然后选择权限类型作为应用程序权限。
  11. 从列表中选择 Mail.Read 权限,然后点击添加权限。
  12. 在应用的已配置权限下,点击为您的组织授予管理员同意。
  13. 点击证书和机密。点击 New client secret 并设置到期时间,最好是从不。
  14. 请复制并存储秘密值。

限制应用访问:

  1. 在 Exchange 管理员的 Windows 计算机上使用提升的权限打开 PowerShell。

  2. 允许执行由受信任发布者签名的脚本。使用以下命令执行此操作。

    • Set-ExecutionPolicy RemoteSigned
  3. 使用以下命令安装 EXO (ExchangeOnline) V2 模块。

    • Install-Module -Name ExchangeOnlineManagement
  4. 加载 EXO V2 模块。

    • Import-Module ExchangeOnlineManagement
  5. 使用管理员帐户连接到 Exchange Online PowerShell。

    • Connect-ExchangeOnline -UserPrincipalName admin-account@yourorg.com
  6. 这应该会打开一个 SSO 对话框。使用管理员帐户登录。

  7. 下一步,我们需要在第 4 步中创建的群组电子邮件地址和在第 13 步中创建的应用客户端 ID。

  8. 使用以下命令将应用的 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."
  9. 就是这样!对应用程序访问策略的更改最多可能需要 30 分钟才能在 Graph REST API 调用中生效。

  10. 退出 ExchangeOnline PowerShell。

    • Disconnect-ExchangeOnline
相关问题