3

我想在 Windows Azure Active Directory 用户中添加特定于用户的自定义属性,例如 LeavePolicyId。

我尝试了不同的方法 - 使用 PowerShell CmdLets、使用 Azure WAAD Graph API 以及显然是通过 Azure 管理门户 UI。但所有的努力都没有给我一个解决方案。

我在这里看到了可用的属性列表 - http://technet.microsoft.com/en-us/library/dn194096.aspx。但我想添加自定义的。

请让我知道是否有其他方法可以解决此问题?

谢谢,

4

2 回答 2

2

您可以使用ExtendedProperty,将属性添加到AAD(Azure Active Directory)中的应用程序注册给用户,然后作为值......

            ExtensionProperty identidadSecreta = new ExtensionProperty
            {
                Name = "LaIdentidadSecreta",
                DataType = "String",
                TargetObjects = { "User" }
            };

            myApplication.ExtensionProperties.Add(identidadSecreta);
            await myApplication.UpdateAsync();
            client.Context.SaveChanges();

然后对用户:

            User user = null;
        try
        {
            ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();
            user = (User)await client.Users.GetByObjectId(objectId).ExecuteAsync();
            user.SetExtendedProperty("extension_e99c8a1afb544da491b098931b0a2ad8_LaidentidadSecreta", "Bruno Días");
            await user.UpdateAsync();

获取值:

                string extensionValue = (String)user.GetExtendedProperties()["extension_e99c8a1afb544da491b098931b0a2ad8_LaidentidadSecreta"];// The Guid is the App Guid.

当心这个!!!!幸运的是,如果您初始化 ActiveDirectoryClient 并使用 Microsoft.Data.Services.Client 版本 5.7.0 将起作用。

    //////
    private static void UndeclaredPropertyHandler(MessageWriterSettingsArgs args)
    {
        var field = args.Settings.GetType().GetField("settings",
          BindingFlags.NonPublic | BindingFlags.Instance);
        var settingsObject = field?.GetValue(args.Settings);
        var settings = settingsObject as ODataMessageWriterSettings;
        if (settings != null)
        {
            settings.UndeclaredPropertyBehaviorKinds =
               ODataUndeclaredPropertyBehaviorKinds.SupportUndeclaredValueProperty;
        }
    }

    public async Task<ActionResult> SomeMethod(string objectId)
    {
        User user = null;
        try
        {
            // forma normal
            ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();
            // #adicional
            client.Context
                  .Configurations.RequestPipeline
                  .OnMessageWriterSettingsCreated(UndeclaredPropertyHandler);
            // #adicional
于 2017-05-10T14:31:27.710 回答
1

看起来有一种方法可以通过 Graph API 来做到这一点……它看起来不像扩展 AD DS 架构……但 Azure AD 看起来并不像那样。

http://blogs.msdn.com/b/aadgraphteam/archive/2013/06/24/extending-the-windows-azure-graph-using-the-windows-azure-graph-store.aspx

那篇文章有更多信息...

于 2013-11-22T12:50:54.153 回答