Azure 向托管标识授予O365邮箱权限

Azure 向托管标识授予O365邮箱权限,azure,azure-active-directory,microsoft-graph-api,azure-logic-apps,Azure,Azure Active Directory,Microsoft Graph Api,Azure Logic Apps,正在尝试获取逻辑应用程序以通过Graph API获取电子邮件详细信息,因为O365 Outlook Connector不提供我需要的输出,但Graph API提供(Internet邮件标题) Outlook connector为身份验证创建了一个API连接,效果非常好 为了调用Graph API,我正在使用HTTP操作,它支持托管标识,所以我想知道: 我是否可以授予权限,以便托管标识可以读取特定邮箱 HTTP操作是否可以使用API连接(类似于Outlook连接器的功能) 1.我是否可以授予权限,

正在尝试获取逻辑应用程序以通过Graph API获取电子邮件详细信息,因为O365 Outlook Connector不提供我需要的输出,但Graph API提供(Internet邮件标题)

Outlook connector为身份验证创建了一个API连接,效果非常好

为了调用Graph API,我正在使用HTTP操作,它支持托管标识,所以我想知道:

  • 我是否可以授予权限,以便托管标识可以读取特定邮箱
  • HTTP操作是否可以使用API连接(类似于Outlook连接器的功能)
  • 1.我是否可以授予权限,以便托管标识可以读取特定邮箱

    托管标识是一个服务主体,我们可以在Azure portal->
    Azure Active Directory
    ->
    企业应用程序中检查它及其权限。但我们无法在其中添加新权限,因此我们需要在
    应用程序注册中,
    ,然后授予Microsoft Graph API的
    Mail.Read
    应用程序权限,请参阅此。权限是调用此api(我想您想使用此api,如果不想,只需按照文档查找应用程序权限,然后添加即可。)最后,不要忘记单击
    授予管理员许可
    按钮

    在逻辑应用程序中,使用Active Directory OAuth进行身份验证https://graph.microsoft.com/
    对于
    受众
    ,以及特定的
    URL
    客户端id
    机密
    等,需要调用MS graph api的内容<代码>xxx@microsoft.com
    是用户主体名称,也是邮箱地址。我不确定我是否足够正确地理解了你问题中的
    阅读某个邮箱
    ,如果你的意思是你只想授予一个邮箱的权限,我会说Microsft graph中没有这样的权限

    2.HTTP操作能否使用API连接(类似于Outlook connector的功能)


    没有用于http操作的预构建连接器,您可以尝试。

    有一种方法可以将该应用程序角色权限添加到托管标识。使用Azure门户不可能做到这一点。您可以在Azure门户中验证以下步骤是否有效。此方法可以节省您自己创建主体的时间,并且不需要客户端id/秘密簿记

    使用Powershell时,可以将Mail.Read应用程序角色权限添加到托管标识(无论是系统托管标识还是用户托管标识)。还有其他执行相同步骤的方法,例如Azure CLI。但以下是我所知道的有用的东西

    这些步骤可用于具有可分配应用程序角色的任何身份和应用程序。因此,您还可以向列表网站添加Sharepoint权限,打开Excel工作表。但请记住,微软应用程序的角色大多是全有或全无。它打破了权限最少的原则。
    我想知道一种避免违反原则的通用方法。

    要将应用程序角色权限分配给托管标识,我们需要了解以下几点:

    身份证

  • …托管标识(如“逻辑应用标识”)
  • …具有应用程序角色的应用程序(例如“Microsoft Graph”)
  • …要分配给托管标识的应用程序角色的id(例如“Mail.Read”)
  • 然后我们可以将应用程序角色分配给托管身份

    为可读性设置一些变量
    $managed\u identity\u name=“逻辑应用程序标识”
    $application\u,具有\u所需的\u角色\u name=“Microsoft Graph”
    $application\u role\u to\u assign\u name=“Mail.Read”
    
    使用AzureAD模块并登录。 从中使用AzureAd模块

    导入模块AzureAd
    Connect AzureAd#显示弹出窗口以登录
    
    1.获取托管标识id
    #首先筛选服务器端,如果有多个结果,where将确保一个结果
    #-所有这些都是必需的,因为托管标识是一种服务主体
    $managed_identity_id=(Get AzureADServicePrincipal-All$true-SearchString$managed_identity_name |其中DisplayName-eq$managed_identity_name)。ObjectId
    
    2.获取具有请求的应用程序角色的应用程序 “Microsoft Graph”上的SearchString返回两个结果,因此使用where子句确保单个结果 #存储返回的对象,因为它包含approles数组 $application_与_required_角色=(Get AzureADServicePrincipal-SearchString“Microsoft Graph”|其中DisplayName-eq“Microsoft Graph”) #有趣的事实:“MicrosoftGraph”应用程序的ObjectId始终是:94d0e336-e38a-4bfc-9b21-8fbb74b6b835 $application\u with theu required\u role\u id=$application\u with theu required\u role.ObjectId 3.获取要分配给托管标识的应用程序角色id
    #所需的id现在被简单地称为id
    #有趣的事实:“Mail.Read”应用程序角色的ObjectId始终是:810c84a8-4a9e-49e6-bf7d-12d183f40d01
    $application_role_to_assign_id=($application_with_required_role.approvles | where Value-eq$application_role_to_assign_name).id
    
    将应用程序角色分配给托管标识
    New AzureADServiceAppRoleAssignment-ObjectId$managed\u identity\u id-PrincipalId$managed\u identity\u id-ResourceId$application\u与所需的\u角色\u id-id$application\u角色\u分配\u id
    
    奖励:验证任务
    #应该列出分配给标识的应用程序,进一步挖掘特定的应用程序角色
    #(我不知道怎么做:S)
    获取AzureADServiceAppRoleAssignedTo-ObjectId$managed_identity_id|fl
    #另一种方法是列出分配给应用程序的标识
    获取AzureADServiceAppRoleAssignment-ObjectId$application,其中包含所需角色id
    
    谢谢Joy,这非常有帮助。关于“如果您的意思是只授予一个邮箱的权限,我将