J'explore la classe SignInManager. Mais les informations données sur MSDN sont très inutiles. Il indique uniquement quelles sont les méthodes et les propriétés fournies.
Ce que je cherche, c'est
1) Qu'est-ce que SignInManager? 2) Comment l'utiliser? 3) Et j'ai ma propre base de données qui contient des informations relatives aux informations d'identification (nom d'utilisateur et mots de passe)
Comment utiliser SignInmanager et comment l'utiliser de manière à ce que ma base de données personnalisée soit utilisée pour authentifier les utilisateurs?
J'utilise asp.net MVC 5 et Visual Studio 2015. Dans mon exemple de projet, j'ai un contrôleur de comptes qui contient des méthodes d'action telles que
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
Mais je ne sais pas comment l'utiliser, MSDN n'a aucun intérêt à fournir des informations à ce sujet. Tous les liens utiles qui l'expliquent en détail car je n'ai aucune idée de ce qu'est SignInManager ni à quoi il sert.
Merci
Clause de non-responsabilité: le modèle utilisé dans l'identité ASP.NET me laisse perplexe et ce que je dis, c'est ma compréhension des choses, cela peut être inexact (je pourrais aussi énoncer des choses évidentes, alors je m'excuse). De plus, je jouais récemment avec l'identité de Asp.Net Core, ce qui est légèrement différent de ce qui était disponible pour Asp.Net 4. Je peux donc mélanger les choses.
L'identité ASP.NET fonctionne avec deux types de cookies: le cookie d'application et le cookie externe. Le cookie d'application contient l'identité de votre application et est émis par le responsable de la connexion. Le cookie externe contient l'identité du fournisseur d'authentification externe et est émis par le middleware d'authentification (tel que FacebookAuthenticationMiddleware
, par exemple). Vous utilisez le Gestionnaire de connexion pour utiliser le cookie externe et émettre à la place un cookie d'application. Si vous n'utilisez pas d'authentification externe, vous ne traitez pas de cookies externes.
Classe déclarée comme ceci:
public class SignInManager<TUser, TKey> : IDisposable
where TUser : class, IUser<TKey>
where TKey : IEquatable<TKey>
Vous pouvez donc utiliser n'importe quelle classe en tant qu'utilisateur tant qu'elle implémente IUser<TKey>
interface. Ou utilisez IdentityUser
comme base si vous partez de zéro, qui implémente IUser<string>
. Dans le passé, j'ai essayé de créer une implémentation qui utilisait int
comme TKey
, mais cette tentative a été abandonnée après avoir passé un certain temps à essayer de la faire fonctionner sans voir de progrès.
SignInManager.SignInAsync
méthode émet immédiatement un cookie d’application pour l’utilisateur spécifié, sans aucune vérification. Ainsi, si vous implémentez une logique d’authentification personnalisée, vous voudrez peut-être l’utiliser (le modèle MVC asp.net par défaut l’utilise après avoir enregistré s'authentifier juste après l'enregistrement).
SignInManager.PasswordSignInAsync
étant donné que le nom d'utilisateur et le mot de passe vérifient leur validité et émettent un cookie d'application s'ils sont corrects.
Au lieu de demander à l'utilisateur de créer spécifiquement un identifiant et un mot de passe pour votre site, vous voudrez peut-être qu'ils utilisent un site Web externe pour s'authentifier et vous transmettre les informations d'authentification avec OAuth.
Asp.Net Identity a la notion de User
et Login
, où User
est ... bien, utilisateur (une personne), et Login
est le justificatif avec lequel User
s'authentifie. User
pourrait avoir plusieurs Login
s.
Le flux OAuth tel qu'il apparaît sur le site Web Asp.Net se présente comme suit (basé sur le flux de connexion par défaut généré par le modèle VS):
FacebookAuthenticationMiddleware
avec l’ID et le secret de l’application fournis par Facebook).ChallengeResult
contenant le nom du fournisseur à utiliser (cela se produit généralement dans AccountController.ExternalLogin
), l'URL de retour est défini pour appeler AccountController.ExternalLoginCallback
et l’URL de retour réelle que l’utilisateur devrait se retrouver est enregistrée pour plus tard.ChallengeResult
et le convertit en réponse de redirection HTTP qui oblige le navigateur de l'utilisateur à se rendre sur un site Web tiers qui demande à l'utilisateur ses informations d'identification./signin-facebook
IIRC).AccountController.ExternalLoginCallback
).AccountController.ExternalLoginCallback
vous êtes censé utiliser le cookie externe et émettre un cookie d'application. C'est ce que SignInManager.ExternalSignInAsync
fait: compte tenu des informations de connexion, il essaie de trouver un utilisateur avec ce Login
. S'il trouve, il émet un cookie d'application; Si ce n'est pas le cas, il vous en informera et vous devriez faire ce que vous pensez être juste lorsque vous recevez unknown Login
(en général, vous créez un nouvel utilisateur à ce stade. L'implémentation par défaut du modèle VS demande des informations supplémentaires à ce stade. et crée l'utilisateur dans AccountController.ExternalLoginConfirmation
). Une fois cet utilisateur redirigé vers l'URL de retour réelle "enregistrée pour plus tard" à l'étape 4.Jusqu'à présent, je n'ai pas réussi à créer de stockage personnalisé pour Asp.Net Identity. Cela implique généralement d'implémenter votre propre classe de gestionnaire d'utilisateurs en descendant le UserManager<TUser, TKey>
et la classe de stockage implémentant un groupe d’interfaces comme IUserStore<TUser, TKey>
, IUserRoleStore<TUser, TKey>
, etc.