使用Azure AD B2C Graph API获取扩展属性不起作用

时间:2016-11-11 11:29:11

标签: azure azure-active-directory azure-ad-b2c azure-ad-graph-api

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

https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/#use-custom-attributes

但是这只会返回以下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对象ID] /extensionProperties?api-version=1.6

有谁知道我做错了什么?

3 个答案:

答案 0 :(得分:3)

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

  

自定义属性存在已知限制。它只是创建   它是第一次在任何策略中使用,而不是在您添加它时   用户属性列表。

答案 1 :(得分:0)

本教程附带的GitHub仓库中有一个错误: https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/#use-custom-attributes

通过将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

答案 2 :(得分:0)

可以通过 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";
}