2017-02-13 15 views
2

Я новичок в Azure AD B2C и создал сайт, который правильно аутентифицируется с использованием местных учетных записей (только по электронной почте). Когда запрос на подтверждение возвращается, я вижу адрес электронной почты в соответствии с требованием «электронной почты», но требование «имя» возвращается как «неизвестно».Установить отображаемое имя/имя пользователя для локальных учетных записей электронной почты в Azure AD B2C?

В окне Azure создана учетная запись, но имя не задано и «неизвестно» для всех зарегистрированных пользователей. Это не то, чего я ожидал. Я бы предпочел, чтобы по умолчанию было задано имя «имя», чтобы было легче найти учетную запись на портале, поскольку мы вообще не собираем «Отображаемое имя» для этого типа учетной записи (пользователь уже входит данный и фамилия).

У меня что-то неправильно настроено, и есть ли способ по умолчанию указать имя пользователя для адреса электронной почты для местных учетных записей только по электронной почте?

+0

Я думаю, что фактическая проблема здесь в том, что я был приравнивая претензию имени пользователя с DisplayName Я думаю, что я действительно хочу, чтобы получить имя обратно, но тха t пока не является опцией в правилах регистрации/политики. – SWC

ответ

0

Azure AD B2C не «автоматически заполняет» любые поля.

При настройке политики регистрации или единой политики регистрации/входа вы можете выбрать атрибуты регистрации. Это атрибуты, которые показывают пользователю для его предоставления, а затем хранятся в Azure AD B2C.

Все, что пользователь не запрашивает, остается пустым или в нескольких случаях (например, имя, которое вы наблюдали) установлено на «неизвестно».

Azure AD B2C не может делать предположений относительно того, как предварительно заполнить данный атрибут с помощью. Хотя вы можете считать приемлемым использовать электронную почту в качестве значения по умолчанию для имени, другие - нет. В другом примере отображаемое имя для некоторых может быть предварительно добавлено с помощью «{Дано имя} {Фамилия}», но для других это наоборот: «{Фамилия, имя, имя]».

Что вы действительно просите - это простой способ настроить значения по умолчанию для некоторых атрибутов, которые сегодня недоступны. Вы можете запросить эту функцию в Azure AD B2C UserVoice forum.

В это время, у вас есть два варианта:

  1. заставляйте пользователей явным образом предоставить это значение путем выбора его в качестве атрибута знака-вверх в вашей политике.
  2. Добавить код, который обновляет эти атрибуты с помощью любой логики (например, в контроллере, который обрабатывает новые учетные записи или через безгонный клиент, выполняющий периодически).

Вот быстрый & грязный фрагмент .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, 
     }, 
     // (...) 
    };