2016-03-02 1 views
2

Я создаю пользователей B2C с поставщиками социальных идентификаторов с помощью политики регистрации, но у нас есть требование добавить к этому новому пользователю некоторые пользовательские атрибуты (расширенные свойства). Например, установите для пользователя «AccountId».Параметры доступа к политике регистрации

Если я добавлю «AccountId» в качестве атрибута регистрации и введите какое-то значение, он отлично работает, когда я проверяю свойства пользователя с помощью API-интерфейса GraphI, «AccountId» верен.

enter image description here enter image description here

Но в этом случае «AccountId» не должны быть доступны для редактирования или видимым для пользователя, я просто хочу, чтобы Зарегистрировать политику, чтобы добавить «ACCOUNTID» к пользователю, созданному с, например Facebook , как скрытое поле на странице регистрации.

Возможно ли, используя мое приложение ASP.Net MVC с использованием Azure B2C AD, передать это значение на страницу регистрации и связать его с атрибутом «Зарегистрироваться»? Можно ли это сделать с помощью параметра (& accountid = 1234) или из некоторых OpenId-свойств?

ответ

1

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

Однако вы можете добиться того же результата, выполнив его самостоятельно в приложении с использованием графика.

Для вашего конкретного примера вам необходимо убедиться в том, что вы отправляете настройки политики регистрации или регистрации/подписания, чтобы отправить заявку newUser, а затем использовать ее после аутентификации, чтобы вызвать график и внести необходимые обновления.

Вот пример того, как можно добиться того, что, при условии, что вы используете ASP.Net согласно this SignIn sample или this SignUp/SignIn sample, за счет использования SecurityTokenValidated уведомления при настройке ваших OpenIdConnectAuthenticationOptions так:

new OpenIdConnectAuthenticationOptions 
{ 
    // Skipping for brevity 
    // (...) 
    Notifications = new OpenIdConnectAuthenticationNotifications 
    { 
    // (...) 
    SecurityTokenValidated = OnSecurityTokenValidated 
    }, 
    // (...) 
}; 

И использование в ClientCredentials поток взывать к API Graph, чтобы сделать обновление следующим образом:

private async Task OnSecurityTokenValidated(SecurityTokenValidatedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification) 
{ 
    string userObjectId = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value; 
    bool newUser = false; 
    bool.TryParse(notification.AuthenticationTicket.Identity.FindFirst("newUser")?.Value, out newUser); 

    if (!newUser) return; 

    ClientCredential credential = new ClientCredential(graphClientId, graphClientSecret); 
    AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/sacacorpb2c.onmicrosoft.com"); 

    AuthenticationResult result = await authContext.AcquireTokenAsync("https://graph.microsoft.com", credential); 

    string body = "{ \"extension_e5bf5a2db0c9415cb62661a70d8f0a68_AccountId\" : \"Your_New_Value"\"}"; 

    HttpClient http = new HttpClient(); 
    string url = "https://graph.microsoft.com/beta/users/" + userObjectId + "/"; 
    HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), url) 
    { 
    Content = new StringContent(body, Encoding.UTF8, "application/json") 
    }; 
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
    HttpResponseMessage response = await http.SendAsync(request); 

    return; 
} 

Важные замечания:

  • Если вы хотите обновить встроенные атрибуты, вы можете использовать Azure AD Graph (https://graph.windows.net), однако если вы хотите обновить пользовательские атрибуты, вы должны запросить бета конечной точки Microsoft Graph (https://graph.microsoft.com). Если вы подойдете к пользовательским атрибутам, обратите внимание, что у них есть более смешные имена (добавленные с помощью Guids), используйте Graph Explorer, query/beta/users и посмотрите, что такое полное имя атрибута.
  • Вам нужно будет зарегистрировать отдельную (от той, которую вы используете для приложения signin/up) с разрешениями разговаривать с графиком. Дополнительную информацию см. В разделе this article, хотя это и не означает, что статья запрашивает разрешение для Azure AD Graph. Возможно, вам потребуется получить разрешения для Microsoft Graph в соответствии с моей предыдущей точкой.