2016-12-13 4 views
1

Привет, Я пытаюсь получить информацию о пользователе, такую ​​как имя и адрес в приложении Xamarin, используя Azure AD B2C для аутентификации.Azure AD B2C информация о пользователе Xamarin

До сих пор я получил аутентификации работает нормально

public async Task<MobileServiceUser> LoginAsync(MobileServiceClient client, MobileServiceAuthenticationProvider provider) 
{ 
    try 
    { 
    //login and save user status 
    var user = await client.LoginAsync(Forms.Context, provider); 

    Settings.AuthToken = user?.MobileServiceAuthenticationToken ?? string.Empty; 
    Settings.UserId = user?.UserId ?? string.Empty; 
    return user; 
    } 
    catch (Exception e) 
    { 
    } 

    return null; 
} 

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

ответ

3

Вы не получаете эту информацию напрямую с помощью SDK MobileService. Ознакомьтесь с полной документацией об аутентификации/авторизации App Service here.

Вы достигнете точки, где он упоминает:

Ваше приложение может также получать дополнительные пользовательские данные через HTTP GET на /.auth/me конечной точке вашего приложения. Действительный токен , который включен в запрос, вернет полезную нагрузку JSON с сведениями о поставщике, который используется, базовом провайдере и другой информации о пользователе. Серверы мобильных приложений SDK предоставляют вспомогательные методы для работы с этими данными.

Таким образом, в вашем Xamarin, после того, как пользователь успешно аутентификации, вы должны явно сделать запрос HTTP GET для /.auth/me и анализировать результат, чтобы получить всю информацию о вошедшего в систему пользователя.

Не знаю, как сделать это в Xamarin, но вот как это сделать в C# UWP (Universal Windows Platform):

   var url = App.MobileService.MobileAppUri + "/.auth/me"; 
       var clent = new Windows.Web.Http.HttpClient(); 
       clent.DefaultRequestHeaders.Add("X-ZUMO-AUTH", this.user.MobileServiceAuthenticationToken); 
       var userData = await clent.GetAsync(new Uri(url)); 

на этом коде, то varibale USERDATA будет JSON srting со всеми требованиями пользователя.

+0

Это работает. Спасибо вам. Последние несколько дней я занимаюсь своим мозгом. На данный момент существует тонна противоречивой информации. Это не помогает мобильной службе стать мобильными приложениями, и у них, похоже, много общего. Бесконечно благодарен! – xerotolerant

+0

Знаете ли вы, есть ли объект, на который я могу ответить, чтобы использовать данные? – xerotolerant

+0

Извините, я не уверен, есть ли уже объект, который вы могли бы использовать для десериализации. Просто подсказка: вы получаете чистую JSON STRING, вы не можете «нарисовать» строку JSON, вы можете «десериализировать» ее. Но тем не менее, я не знаю, какой объект вы должны использовать. Проверьте структуру и динамику или спроектируйте свой объект. Он должен быть близок к классу [ClaimsPrincipal Class] (https://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal (v = vs.110) .aspx) – astaykov

Смежные вопросы