尝试获取逻辑应用程序以通过Graph API获取电子邮件详细信息,因为O365 Outlook Connector不提供我需要的输出,但是Graph API可以提供(Internet邮件头)。
Outlook连接器创建用于身份验证的API连接,效果很好。
要调用Graph API,我正在使用HTTP操作,它支持托管身份,所以我想知道:
答案 0 :(得分:1)
1。我可以授予权限以使“托管身份”可以读取某个邮箱吗?
托管身份是服务主体,我们可以在Azure门户-> Azure Active Directory
-> Enterprise applications
中检查其及其权限。但是我们无法在其中添加新的权限,因此我们需要在App registrations
,create a new AD App中使用add credentials to your app
,然后授予Microsoft Graph API的Mail.Read
应用程序权限,请参阅此link。权限是调用此api List messages(我想您要使用此api,否则请按照文档查找应用许可,然后将其添加。)最后,不要忘记单击{ {1}}按钮。
在逻辑应用程序中,将Grant admin consent
使用Active Directory OAuth
,将Authentication
使用https://graph.microsoft.com/
,并具体指定Audience
,URL
,{{ 1}}等,需要调用MS图形API。 Client id
是用户主体名称,也是邮箱地址。我不确定我对您的问题中的 secret
的理解是否足够正确,如果您是说您只想授予一个邮箱的权限,我会说Microsft中没有这样的权限图。
2。HTTP操作可以使用API连接(类似于Outlook连接器的功能)吗?
http操作没有pre-bulit连接器,您可以尝试使用Custom connectors in Logic Apps。
答案 1 :(得分:0)
有一种方法可以将该应用程序角色权限添加到托管标识。使用 Azure 门户无法做到这一点。您可以在 Azure 门户中验证以下步骤是否有效。此方法无需您自己创建委托人,并且无需记录客户 ID/秘密簿记。
当您使用 Powershell 时,可以将 Mail.Read 应用程序角色权限添加到托管身份,无论是系统托管身份还是用户托管身份。还有其他方法可以执行相同的步骤,例如Azure CLI。但以下是我所知道的有效和使用过的。
这些步骤适用于具有可分配应用程序角色的任何身份和应用程序。因此,您还可以添加 Sharepoint 权限以列出站点、打开 Excel 工作表。但请记住,Microsoft 应用程序角色大多是全有或全无。它打破了最小特权的原则。
我很想知道一种避免违反原则的通用方法。
要将应用角色权限分配给托管身份,我们需要了解以下几点:
...的ID
然后我们可以将应用程序角色分配给托管标识。
$managed_identity_name = "logic-app-identity"
$application_with_the_required_role_name = "Microsoft Graph"
$application_role_to_assign_name = "Mail.Read"
使用来自 here
的 AzureAd 模块Import-Module AzureAd
Connect-AzureAd #shows popup to login
# filter first server side, and in case of multiple results, the where ensures a single result
# -All is necessary because a managed identity is a sort of service principal
$managed_identity_id = (Get-AzureADServicePrincipal -All $true -SearchString $managed_identity_name | where DisplayName -eq $managed_identity_name).ObjectId
# -SearchString on "Microsoft Graph" returns two results, therefore the where clause to ensure a single result
# storing the returned object, because it contains the approles array
$application_with_the_required_role = (Get-AzureADServicePrincipal -SearchString "Microsoft Graph" | where DisplayName -eq "Microsoft Graph")
# fun fact: the ObjectId of the "Microsoft Graph" application is always: 94d0e336-e38a-4bfc-9b21-8fbb74b6b835
$application_with_the_required_role_id = $application_with_the_required_role.ObjectId
# the required id is now simply called Id
# fun fact: the ObjectId of the "Mail.Read" app role is always: 810c84a8-4a9e-49e6-bf7d-12d183f40d01
$application_role_to_assign_id = ($application_with_the_required_role.AppRoles | where Value -eq $application_role_to_assign_name).Id
New-AzureADServiceAppRoleAssignment -ObjectId $managed_identity_id -PrincipalId $managed_identity_id -ResourceId $application_with_the_required_role_id -Id $application_role_to_assign_id
# should list the assigned application to the identity, dig further for the specific app role
# (I don't know how :S)
Get-AzureADServiceAppRoleAssignedTo -ObjectId $managed_identity_id | fl
# and the other way around to list the identities assigned to the application
Get-AzureADServiceAppRoleAssignment -ObjectId $application_with_the_required_role_id | fl