使用Azure AD B2C图形API获取扩展属性不工作



我正在尝试发现我的应用程序可用的扩展属性。我最初遵循这个指南来获取扩展属性:

https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/使用自定义属性

但它只返回以下JSON:

{
  "odata.metadata": "https://graph.windows.net/screenmediatestb2c.onmicrosoft.com/$metadata#directoryObjects/Microsoft.DirectoryServices.ExtensionProperty",
  "value": []
}

我也尝试过使用Postman对常规HTTP请求执行此操作,但结果完全相同。我可以验证和加载应用程序、用户、组等。但是它不返回任何我的自定义属性,我有2个。

我使用的端点是:

https://graph.windows.net/[tenant]/applications/[application object ID]/extensionProperties?api-version=1.6

有人知道我做错了什么吗?

我刚刚注意到这个页面底部的免责声明https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-reference-custom-attr/。看来这可能是我们的问题。

自定义属性有一个已知的限制。它只是被创造出来的在任何策略中第一次使用它,而不是在将它添加到用户属性列表

随附的GitHub repo教程中有一个错误:https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/使用自定义属性

将Program.GetB2CExtensionApplication(…)更改为:

private static void GetB2CExtensionApplication(string[] args)
{
  object formatted = JsonConvert.DeserializeObject(client.
      GetApplications("$filter=startswith(displayName, 'b2c-extensions-app')").Result);
  Console.ForegroundColor = ConsoleColor.White;
  Console.WriteLine(JsonConvert.SerializeObject(formatted, Formatting.Indented));
}

不是检查displayName是否等于'b2c-extensions-app',而是检查它是否以'b2c-extensions-app'开头。他们已经在Azure AD B2C的后续版本中更改了应用程序的名称。

当你使用返回的ID来获取扩展名时,你会看到自定义属性名带有Guid前缀,这就是为什么我们在访问它时遇到麻烦的原因:如。extension_10ecdccd92c446829a399e68ed758978_MyCustomAttribute

GET - b2c - application的正确GET URL应该是:

GET https://graph.windows.net/{Tenant}/applications?api-version=1.6&$filter=startswith(displayName,'b2c-extensions-app')

扩展属性(自定义属性)的GET URL应该是:

GET https://graph.windows.net/{Tenant}/applications/{ObjectID}/extensionProperties?api-version=1.6

可以通过LINQ获取属性:

    string selectClause = "GivenName,Surname,Id,Mail"
    + ",extension_{ExtensionPropertyPrefixGUID}_myAttribute1"
    + ",extension_{ExtensionPropertyPrefixGUID}_myAttribute2";
    var result = await _graphClient.Users
    .Request()
    .Select(selectClause)
    .GetAsync();
扩展属性可以通过AdditionalData 访问
foreach (User user in result.CurrentPage)
{
 string attribute1Value = (string)user.AdditionalData["extension_{ExtensionPropertyPrefixGUID}_myAttribute1";
}

相关内容

  • 没有找到相关文章

最新更新