我试图通过查看自定义字段(即员工ID)以及是否已经存在该员工ID的记录来防止在Azure B2C中创建重复帐户,不允许用户创建新帐户。由于没有出现,您可以使用自定义字段作为输入,因此我正在考虑使用Graph API查看是否为给定的Employee ID返回了一条记录-如果有,那么它将停止注册过程,如果没有不能继续注册。
是否可以直接调用Graph API并在策略中进行此记录计数比较。还是我需要一个单独的脚本/函数来使用给定的员工ID调用Graph API,然后返回要比较的记录数?
答案 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属性中。此属性具有唯一性约束。