根据文档,我们可以使用以下端点来获取敏感度标签:
/me/informationProtection/policy/labels(使用委派权限)
/informationProtection/policy/labels(使用应用程序权限。应用程序应具有使用此端点的 InformationProtectionPolicy.Read.All 权限)
以下 C# 代码使用应用程序权限,它适用于租户 1:
static void Main(string[] args)
{
string accessToken = getTokenImpl().Result;
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("User-Agent", "PostmanRuntime/7.24.1");
using (var response = client.GetAsync($"https://graph.microsoft.com/beta/informationprotection/policy/labels").Result)
{
using (var content = response.Content)
{
string result = content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine(result);
}
}
}
}
}
private static async Task<string> getTokenImpl()
{
string clientId = "...";
string clientSecret = "...";
string tenant = "{...}.onmicrosoft.com";
string authority = string.Format("https://login.microsoftonline.com/{0}", tenant);
var authContext = new AuthenticationContext(authority);
var creds = new ClientCredential(clientId, clientSecret);
var authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", creds);
return authResult.AccessToken;
}
但它在另一个租户 2 上不起作用 - 它总是返回 404“找不到资源”,并出现以下内部异常“用户未找到标签,策略为空”。以下是完整回复:
{
"error": {
"code": "itemNotFound",
"message": "The resource could not be found.",
"innerError": {
"code": "notFound",
"message": "User not found to have labels, policy is empty",
"target": "userId",
"exception": null,
"date": "2020-11-18T09:29:20",
"request-id": "657ad51c-9cab-49f2-a242-50929cdc6950",
"client-request-id": "657ad51c-9cab-49f2-a242-50929cdc6950"
}
}
}
有趣的是,尝试在同一租户 2 上使用委派权限调用端点 /me/informationProtection/policy/labels 会产生相同的错误,但在租户 1 上它也可以工作。有没有人遇到过这个问题或知道它为什么会发生?需要提到的是,在之前的tenant2 上,我们为特定用户创建并发布了几个敏感度标签——该用户既没有 O365 许可证也没有 Azure 订阅。即,当您尝试登录 SPO/Azure 并创建站点/组时 - 该用户根本没有显示敏感度标签。我们尝试删除这些敏感度标签及其针对此用户的受众群体定位政策,但两个端点仍然返回错误。
PS。AAD 应用程序在租户 2 上正常 - 它具有 InformationProtectionPolicy.Read.All 权限和管理员同意:
2020-11-25 更新:两个租户的行为都发生了变化,我们这边没有任何改变:现在在两个租户上,我们都得到 502 Bad Gateway。MS 现在是否在全球范围内推出此功能?这是我们现在从 /beta/me/informationProtection/policy/labels 得到的响应:
{
"error":{
"code":"UnknownError",
"message":"<html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body>\r\n<center><h1>502 Bad Gateway</h1></center>\r\n<hr><center>Microsoft-Azure-Application-Gateway/v2</center>\r\n</body>\r\n</html>\r\n",
"innerError":{
"date":"2020-11-25T12:59:51",
"request-id":"93557ae1-b0d9-44a9-bbea-871f18e379ea",
"client-request-id":"93557ae1-b0d9-44a9-bbea-871f18e379ea"
}
}
}
2020-12-07 更新:它开始自行工作。即,当重现此问题时,MS 已在后端以某种方式为租户修复了该问题。