我在 Azure 中有一个函数,它启用了 MSI(托管服务标识),我试图用它来访问基于 Azure 的 WebAPI(应用服务 WebApp),而后者又启用了 Azure AD 身份验证(所有相同的 Azure 目录)。
我的 WebAPI 注册了一个 Azure 应用程序,因此它可以使用 AAD 身份验证。
此应用程序还在其清单中配置了必要的 AppRoles(用于类型“用户”和“应用程序”)。
当我在函数上启用 MSI 时,我还验证了函数标识(应用程序)已在 Azure AD 中成功创建。
当我尝试使用 MSI 在我的函数中获取令牌时,我收到 400 Bad Request 响应/错误:
“ExceptionMessage”:“AADSTS50105:应用程序‘###’未分配给应用程序‘###’的角色
“错误代码”:“invalid_grant”
我已确保我传入的资源值是我的 webAPIs 应用程序 ID URI。
string resource = "<My App URI>";
string apiversion = "2017-09-01";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
var r = await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
return r;
但我仍然得到同样的错误。请求令牌的代码很好,错误确实指向权限问题。
我无法做的一件事(我猜这是问题所在)是找到一种方法将新的 MSI/功能标识添加到 webAPIs Azure App 的用户和组。无论我尝试什么,当我搜索它以添加为 webAPI 应用程序的成员(具有应用程序角色)时,我的 Functions App Identity 都不会出现在用户列表中。
有人对我为什么不能将 Functions MSI 添加到应用程序用户和组或 Azure AD 组有任何建议吗?
还是我做错了什么?