您如何使用图形 API 设置 userExtension/可选声明?

时间:2021-07-01 08:41:18

标签: c# microsoft-graph-api azure-ad-graph-api claims

我正在编写代码来设置可选声明。我成功地使用 PowerShell Set-AzureADUserExtension 设置声明并使用 Get-AzureADUserExtension 对其进行验证。但是我们需要使用graphApi来设置值。

我尝试了一些变体的 graphApi 调用是:

var application = (await graphClient.Applications.Request().Filter($"appId eq '{appClientId}'").GetAsync()).SingleOrDefault();
var schemas = await graphClient.Applications[application.Id].ExtensionProperties.Request().GetAsync();
var schema = schemas.CurrentPage.Single(x => x.Name == $"extension_{appClientId.Replace("-", string.Empty)}_clShops");
await graphClient.Users[userId].Extensions.Request().AddAsync (new OpenTypeExtension
{
     ODataType = "Microsoft.DirectoryServices.User",
     AdditionalData = new Dictionary<string, object> { { schema.Name, "1,2,3" } },
     ExtensionName = schema.Id    
});

我尝试更改 OpenTypeExtension 中的值,但我无法更改该用户的值(使用 Get-AzureADUserExtension powershell 命令检查)。

我的问题是我需要调用什么 graphApi 函数,以便设置可选声明以获得与调用 Set-AzureADUserExtension 相同的结果?

c# graphApi sdk 版本为 Microsoft.Graph Version=3.35.0

1 个答案:

答案 0 :(得分:0)

经过多次测试后发现: 或者,您可以使用以下方法获取名称:

var application = (await graphClient.Applications.Request().Filter($"appId eq '{appClientId}'").GetAsync()).SingleOrDefault();
var schemas = await graphClient.Applications[application.Id].ExtensionProperties.Request().GetAsync();
var schema = schemas.CurrentPage.Single(x => x.Name.EndsWith("name of claim"));

或者按照惯例(用 schema.Name 替换):$"extension_{appId}_{'name of claim'}"

await graphClient.Users[userId].Request().UpdateAsync(new Microsoft.Graph.User
        {
            AdditionalData = new Dictionary<string, object>
            {
                { schema.Name,value}
            }
        });