Depuis plusieurs jours, j'essaie d'obtenir l'authentification OAuth avec Google et Facebook pour travailler dans mon projet d'api web ASP.net.
mon statut actuel est:
mon objectif est:
Dans mon Android et angular je suis en mesure de récupérer les jetons d'accès de google/facebook. Maintenant, je veux utiliser le OAuth flux implicite, pour authentifier l'utilisateur sur mon API web, avec les jetons d'accès donnés (en mettant les jetons dans l'en-tête comme jeton de porteur)
Il y a mon problème: existe-t-il un moyen générique de le faire facilement? Je ne veux pas utiliser les SDK facebook/google pour cela.
J'ai essayé de suivre:
Au cours des derniers jours, j'ai essayé tellement de solutions possibles que je suis totalement coincé et perdu de vue ce que je dois faire pour y parvenir. À ce stade, j'ai lu presque toutes les API web asp.net oauth tutorial/stackoverflow entry mais je ne peux pas comprendre comment utiliser cela dans mon cas comme je le souhaite. La plupart des tutoriels sont juste pour mvc -Sites Web ou en utilisant IdentityServer4 avec la redirection vers sa page de connexion.
Des suggestions ou des solutions? Qu'est-ce que je rate?
Si je comprends bien, vous avez déjà votre jeton d'utilisateur Facebook à partir du SDK Facebook via votre application.
Comme vous, je n'ai pas trouvé comment le faire avec une bibliothèque/un package ASP.NET Core. Je suis donc revenu à l'essentiel.
. nom d'utilisateur/mot de passe.
[HttpPost]
[AllowAnonymous]
[Route("api/authentication/FacebookLogin")]
public async Task<IActionResult> FacebookLogin([FromBody] FacebookToken facebookToken)
{
//check token
var httpClient = new HttpClient { BaseAddress = new Uri("https://graph.facebook.com/v2.9/") };
var response = await httpClient.GetAsync($"me?access_token={facebookToken.Token}&fields=id,name,email,first_name,last_name,age_range,birthday,gender,locale,picture");
if (!response.IsSuccessStatusCode) return BadRequest();
var result = await response.Content.ReadAsStringAsync();
var facebookAccount = JsonConvert.DeserializeObject<FacebookAccount>(result);
//register if required
var facebookUser = _context.FacebookUsers.SingleOrDefault(x => x.Id == facebookAccount.Id);
if (facebookUser == null)
{
var user = new ApplicationUser {UserName = facebookAccount.Name, Email = facebookAccount.Email};
var result2 = await _userManager.CreateAsync(user);
if (!result2.Succeeded) return BadRequest();
facebookUser = new FacebookUser {Id = facebookAccount.Id, UserId = user.Id};
_context.FacebookUsers.Add(facebookUser);
_context.SaveChanges();
}
//send bearer token
return Ok(GetToken(facebookUser.UserId));
}