Azure AD B2C не «автоматически заполняет» любые поля.
При настройке политики регистрации или единой политики регистрации/входа вы можете выбрать атрибуты регистрации. Это атрибуты, которые показывают пользователю для его предоставления, а затем хранятся в Azure AD B2C.
Все, что пользователь не запрашивает, остается пустым или в нескольких случаях (например, имя, которое вы наблюдали) установлено на «неизвестно».
Azure AD B2C не может делать предположений относительно того, как предварительно заполнить данный атрибут с помощью. Хотя вы можете считать приемлемым использовать электронную почту в качестве значения по умолчанию для имени, другие - нет. В другом примере отображаемое имя для некоторых может быть предварительно добавлено с помощью «{Дано имя} {Фамилия}», но для других это наоборот: «{Фамилия, имя, имя]».
Что вы действительно просите - это простой способ настроить значения по умолчанию для некоторых атрибутов, которые сегодня недоступны. Вы можете запросить эту функцию в Azure AD B2C UserVoice forum.
В это время, у вас есть два варианта:
- заставляйте пользователей явным образом предоставить это значение путем выбора его в качестве атрибута знака-вверх в вашей политике.
- Добавить код, который обновляет эти атрибуты с помощью любой логики (например, в контроллере, который обрабатывает новые учетные записи или через безгонный клиент, выполняющий периодически).
Вот быстрый & грязный фрагмент .Net кода, который вы можете использовать для этого (при условии, что вы хотите сделать это в Идент трубопровода (Startup.Auth.cs):
private async Task OnSecurityTokenValidated(SecurityTokenValidatedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
try
{
var userObjectId = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
// You'll need to register a separate app for this.
// This app will need APPLICATION (not Delegated) Directory.Read permissions
// Check out this link for more info:
// https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet
var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(string.Format(graphAuthority, tenant));
var t = await authContext.AcquireTokenAsync(graphResource, new ClientCredential(graphClientId, graphClientSecret));
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + t.AccessToken);
var url = graphResource + tenant + "https://stackoverflow.com/users/" + userObjectId + "/?api-version=1.6";
var name = "myDisplayName";
var content = new StringContent("{ \"displayName\":\"" + name + "\" }", Encoding.UTF8, "application/json");
var result = await client.PostAsync(url, content);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
You» Л.Л. ссылка на этот метод, когда вы настроить ваш OpenIdConnectAuthenticationOptions как так:.
new OpenIdConnectAuthenticationOptions
{
// (...)
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
SecurityTokenValidated = OnSecurityTokenValidated,
},
// (...)
};
Я думаю, что фактическая проблема здесь в том, что я был приравнивая претензию имени пользователя с DisplayName Я думаю, что я действительно хочу, чтобы получить имя обратно, но тха t пока не является опцией в правилах регистрации/политики. – SWC