从B2C IEF策略中为附加属性调用MS Graph API

时间:2020-09-16 16:29:55

标签: azure-ad-b2c

我试图通过查看自定义字段(即员工ID)以及是否已经存在该员工ID的记录来防止在Azure B2C中创建重复帐户,不允许用户创建新帐户。由于没有出现,您可以使用自定义字段作为输入,因此我正在考虑使用Graph API查看是否为给定的Employee ID返回了一条记录-如果有,那么它将停止注册过程,如果没有不能继续注册。

是否可以直接调用Graph API并在策略中进行此记录计数比较。还是我需要一个单独的脚本/函数来使用给定的员工ID调用Graph API,然后返回要比较的记录数?

2 个答案:

答案 0 :(得分:0)

您可以使用Microsoft Graph SDK来实现。

对Microsoft Graph API的任何请求都需要访问令牌进行身份验证。该解决方案利用Microsoft.Graph.Auth NuGet程序包,该程序包提供了基于身份验证方案的Microsoft身份验证库(MSAL)的包装程序,以便与Microsoft Graph SDK一起使用。

例如,您正在使用C#实现此目的, Program.cs 代码段如下所示:

// Read application settings from appsettings.json (tenant ID, app ID, client secret, etc.)
AppSettings config = AppSettingsFile.ReadFromJsonFile();

// Initialize the client credential auth provider
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(config.AppId)
    .WithTenantId(config.TenantId)
    .WithClientSecret(config.ClientSecret)
    .Build();
ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

// Set up the Microsoft Graph service client with client credentials
GraphServiceClient graphClient = new GraphServiceClient(authProvider);

UserService.cs:

public static async Task ListUsers(GraphServiceClient graphClient)
{
    Console.WriteLine("Getting list of users...");

    // Get all users (one page)
    var result = await graphClient.Users
        .Request()
        .Select(e => new
        {
            e.employeeId
        })
        .GetAsync();

    foreach (var user in result.CurrentPage)
    {
        Console.WriteLine(JsonConvert.SerializeObject(user));
    }
}

如果您成为result的现有员工,则将使登录无效并发送带有错误消息的错误响应。

答案 1 :(得分:0)

在注册期间,使用自定义策略将employeeId值存储在signInNames属性中。此属性具有唯一性约束。