Je pense que j'ai une petite idée fausse que
Identity = uniquement MVC - renvoyant des vues
et WebAPI => vous devez opter pour un moyen d'authentification symbolique comme JWT
Alors, je voudrais demander
Est-il possible d'utiliser cette identité AspNetCore par défaut avec WebAPI?
Ou peut-être que je devrais demander Est-ce que javascript publie / obtient des cookies en plus?
4 Réponses :
Oui, c'est possible. Cependant, certaines bibliothèques JS nécessitent que vous activiez la transmission de cookies. Axios, par exemple, vous oblige à définir withCredentials: true.
Faut-il faire quelque chose de plus par rapport à MVC "normal" lorsqu'il s'agit de configurer cette authentification sur le backend?
Vous pouvez utiliser l'authentification par cookie ou l'authentification par jeton et même les deux si vous le souhaitez. Cela dépend de vos besoins.
En javascript, vous pouvez envoyer à la fois des cookies et des en-têtes d'autorisation pour autoriser.
Utiliser JWT n'est pas du tout proche d'utiliser OAuth
@CamiloTerevinto Et alors? Vous pouvez utiliser JWT ainsi que OAuth.
Qu'est-ce qui vous fait penser que l'utilisation des jetons est similaire à OAuth? OAuth peut être utilisé avec des jetons ou des cookies comme bon vous semble, ce point n'a aucun sens
@Alexander pouvez-vous partager un exemple pour travailler ensemble, l'authentification par cookie et le jeton fonctionnent comme prévu?
Est-il possible d'utiliser cette identité AspNetCore par défaut avec WebAPI?
Oui. Il fonctionnera de la même manière que dans le modèle par défaut
Asp.Net Mvc
. VotreAccountController
peut ressembler à ceci:public class AccountController : Controller { private readonly SignInManager<ApplicationUser> _signInManager; public AccountController(SignInManager<ApplicationUser> signInManager) { _signInManager = signInManager; } public async Task<IActionResult> Login(string login, string password) { var result = await _signInManager.PasswordSignInAsync(login, password, true, lockoutOnFailure: false); if (result.Succeeded) { //process successful result } else { //process failed result } } }
SignInManager . PasswordSignInAsync ()
attribuera les cookies nécessaires au processus d'authentification .
D'un point de vue technique, le cookie est juste un en-tête http, tout comme l'en-tête d'autorisation, vous pouvez donc protéger votre API avec un cookie.
En fait, si votre API ne sert qu'un SPA sur le même domaine, le cookie est une option meilleure et plus sûre.
L'authentification de base de jetons est destinée aux scénarios où une API sert plusieurs clients sur différents domaines avec différents niveaux d'accès. Il est judicieux de séparer le serveur d'authentification du serveur API dans ces cas.
Je recommande de lire ces articles:
Non, vous pouvez utiliser ASP.NET Core Identity mais vous devez utiliser JWT au lieu de cookies
@CamiloTerevinto Pourquoi?
Parce qu'une API Web ne doit pas se soucier de ce qu'est le client, et vous devez pirater des choses pour que les cookies fonctionnent soit en JavaScript, soit dans les applications mobiles
Ajouter pour ne pas mentionner les cookies exposent votre API aux attaques XSRF