net mvc implement example based asp c# asp.net oauth oauth-2.0 owin

c# - mvc - token owin



OWIN-Acceda a reclamos externos en solicitudes posteriores (1)

Intenté usar la información de inicio de sesión externa para extraer datos como la imagen y la URL del perfil. La forma correcta de hacerlo es asignar reclamos desde la fuente externa a la identidad local de la siguiente manera:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User, string> manager, IAuthenticationManager authentication = null) { // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // Add custom user claims here if (authentication != null) { ExternalLoginInfo info = authentication.GetExternalLoginInfo(); if (info != null) foreach (Claim claim in info.ExternalIdentity.Claims.Where(claim => !userIdentity.HasClaim(c => c.Type == claim.Type))) { userIdentity.AddClaim(claim); await manager.AddClaimAsync(userIdentity.GetUserId(), claim); } } return userIdentity; }

Tengo una aplicación ASP.Net que utiliza OWIN y accesos externos a través de un proveedor externo, específicamente google.

Durante la autenticación, este código se utiliza para extraer el ClaimsIdentity del OwinContext

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

donde AuthenticationManager es

private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } }

Sin embargo, en solicitudes posteriores (es decir, redirigir a la página de inicio después del inicio de sesión exitoso) GetExternalLoginInfoAsync () devuelve null. Lo que quiero hacer es acceder a la información sobre la cuenta del usuario (es decir, la imagen de perfil) que el proveedor externo devuelve de mi solicitud de autenticación. ¿Cómo puedo acceder a estos reclamos desde un controlador MVC o un controlador API web?

Casi todo el código que tengo es código de la placa de la caldera de Visual Studio, así que no lo incluiré aquí, pero puedo agregar algo si es necesario algo específico.

Gracias por cualquier ayuda que pueda ofrecer.