是的,你可以,你可以参考我关于这个主题的文章:https ://joonasw.net/view/calling-your-apis-with-aad-msi-using-app-permissions 。
您必须在 API 中定义应用权限,然后通过 PowerShell 或图形 API 之一将这些权限分配给 MSI 服务主体。
AAD 中 API 应用清单中的示例应用权限:
{
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Read all things",
"id": "32028ccd-3212-4f39-3212-beabd6787d81",
"isEnabled": true,
"description": "Allow the application to read all things as itself.",
"value": "Things.Read.All"
}
]
}
此处有关权限的更多信息:https ://joonasw.net/view/defining-permissions-and-roles-in-aad 。
然后,您可以通过 AAD PowerShell 将其分配给服务主体:
Connect-AzureAD
New-AzureADServiceAppRoleAssignment -ObjectId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -Id 32028ccd-3212-4f39-3212-beabd6787d81 -PrincipalId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -ResourceId c3ccaf5a-47d6-4f11-9925-45ec0d833dec
ObjectId 和 PrincipalId 都是 MSI 生成的服务主体的 id。Id 是角色/应用权限的 id。ResourceId 是 API 服务主体的 ID。
执行此操作后,您可以使用 API 的托管标识获取令牌,并且该令牌将包含应用程序权限,如"roles": "Things.Read.All"
.