Hola, estoy tratando de obtener información de usuario como el nombre y la dirección en una aplicación de Xamarin usando Azure AD B2C para la autenticación.

Hasta ahora he conseguido que la autenticación funcione bien

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;
}

Sin embargo, me gustaría saber cómo obtener el nombre y la fecha de nacimiento del usuario. No he podido encontrar un curso de acción claro para eso.

1
xerotolerant 13 dic. 2016 a las 19:06

1 respuesta

La mejor respuesta

No obtiene esta información explícitamente mediante MobileService SDK. Consulte la documentación completa sobre la autenticación / autorización del servicio de aplicaciones aquí.

Llegarás al punto donde menciona:

Su aplicación también puede obtener detalles de usuario adicionales a través de un HTTP GET en el extremo /.auth/me de su aplicación. Un token válido que se incluye con la solicitud devolverá una carga útil JSON con detalles sobre el proveedor que se está utilizando, el proveedor subyacente token y otra información de usuario. Los SDK del servidor de aplicaciones móviles proporcione métodos auxiliares para trabajar con estos datos.

Entonces, en su Xamarin, después de que el usuario se autentica con éxito, debe realizar explícitamente una solicitud HTTP GET a /.auth/me y analizar el resultado para obtener toda la información sobre el usuario que inició sesión.

No estoy seguro de cómo hacer esto en Xamarin, pero aquí se explica cómo hacerlo en C # UWP (Plataforma universal de Windows):

                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));

Al final de la ejecución de este código, el userData varibale será un srting JSON con todas las reclamaciones del usuario.

3
astaykov 14 dic. 2016 a las 02:34
Esto funciona. Gracias. Me he estado rompiendo el cerebro durante los últimos días. Actualmente, hay un montón de información contradictoria. No ayuda que Mobile Service se haya convertido en aplicaciones móviles y parece que tienen mucho en común. ¡Un millón de gracias!
 – 
xerotolerant
14 dic. 2016 a las 06:09
¿Sabes si hay un objeto al que puedo enviar la respuesta para poder usar los datos?
 – 
xerotolerant
14 dic. 2016 a las 07:03
Lo siento, no estoy seguro de si ya existe un objeto que pueda usar para la deserialización. Solo una pista: lo que obtienes es una CADENA JSON pura, no puedes cast una cadena JSON, puedes deserialise. Pero aún así, no sé qué objeto deberías usar. Compruebe la estructura y la dinámica, o diseñe su objeto. Debe estar cerca de Clase ClaimsPrincipal
 – 
astaykov
14 dic. 2016 a las 11:53
¡Te besaría si pudiera! ¿Por qué es necesario pasar por todos estos aros para obtener información muy básica? La documentación es pobre para "AAD" pero también lo es la implementación. Esto y tener que saltar de un lado a otro entre el portal nuevo y el antiguo ... qué broma. Estimado MSFT -> ¡Obtenga AAD bien!
 – 
Bobby Turkalino
25 abr. 2017 a las 23:42