Table des matières
Analyse de la gestion de l'authentification dans .NET Core
0x00 Source du problème
0x03 Identifiez l'utilisateur via Cookie
0x04 Écrivez votre propre gestion de l'authentification des utilisateurs
Maison développement back-end Tutoriel C#.Net Analyse de la gestion de la certification .NET Core

Analyse de la gestion de la certification .NET Core

Mar 12, 2017 pm 04:36 PM

Analyse de la gestion de l'authentification dans .NET Core

0x00 Source du problème

Lors de la création d'un nouveau site Web .NET Core projet Sélectionnez "Utiliser un compte utilisateur personnel" pour créer un projet avec des utilisateurs et une gestion des autorisations De nombreuses pages telles que enregistrement des utilisateurs et la connexion sont prêtes à utiliser AuthorizeAttribute pour effectuer diverses tâches. . Ce type de gestion des autorisations semble très pratique. Mais je ne sais pas ce que le code généré fait pour moi. Après avoir regardé le tableau de données généré, les fonctions sont assez compliquées. En fait, tout ce dont j'ai besoin est une gestion de l'authentification basée sur les utilisateurs et les rôles, et les informations sur les utilisateurs utilisent les bibliothèques existantes. Cependant, l'utilisation du composant d'authentification fourni avec .NET Core doit s'appuyer sur EF, et de nombreuses structures de tables ne correspondent pas, donc l'apprentissage. J'ai implémenté le composant d'authentification intégré, puis écrit mon propre service d'authentification pour remplacer le composant Identity. En même temps, le Cookie était géré à l'aide du Cookie intégré middleware , vous pouvez utiliser AuthorizeAttribute pour l'authentification. Je n'ai pas encore rencontré d'exigences complexes, alors je viens d'apprendre ici. Ce blog se concentre sur l'authentification basée sur les utilisateurs et les rôles dans le cas le plus simple. Pour une utilisation de base des composants d'authentification intégrés de .NET Core, veuillez vous référer à http://www.php.cn/.

0x01 Gestion de l'authentification dans .NET Core

En matière de gestion de l'authentification, le Premier ministre pense à l'enregistrement, à la connexion, à la déconnexion et à l'ajout des utilisateurs/ Supprimez des fonctionnalités telles que les caractères . Les informations sur les utilisateurs, les informations sur les rôles, etc. sont toutes stockées dans la base de données. Il comprend donc principalement deux parties : le fonctionnement de la base de données et la logique métier de connexion. Au niveau de la logique métier de connexion, .NET Core est principalement géré via trois classes principales UserManager, RoleManager et SigninManager (dans l'assembly Microsoft.AspNetCore.Identity). Parmi eux :

  • UserManager est principalement responsable de l'authentification, de l'enregistrement, de la modification, de la suppression et de la gestion des rôles, jetons, déclarations liés aux utilisateurs, etc.

  • RoleManager est responsable de la gestion des rôles et des déclarations liées aux rôles.

  • SigninManager est responsable de la connexion, de la déconnexion et d'autres opérations connexes. Lorsque des opérations utilisateur sont impliquées (telles que la vérification de l'utilisateur lors de la connexion), UserManager sera appelé pour effectuer des opérations.

Lors de l'exploitation de la base de données, ces trois classes principales utilisent UserStore et RoleStore au niveau de la base de données (dans l'assembly Microsoft.AspNetCore.Identity.EntityFrameworkCore). La relation commerciale est illustrée dans la figure ci-dessous :

Nous pouvons utiliser ces trois classes principales lors du développement de fonctions liées à l'authentification . La plupart des besoins. Lorsque nous utilisons les objets de ces classes principales, ils sont obtenus via Injection de dépendances Alors, quand ces dépendances associées sont-elles injectées ? Il existe une méthode d'extension AddIdentity dans la méthode ConfigureServices de Startup, dans laquelle toutes les dépendances requises sont ajoutées.

0x02 Connexion et déconnexion

Après avoir compris la division globale du travail du composant Identité, commençons jetez un œil à la connexion et aux détails partiels de l’opération de déconnexion. SigninManager est principalement responsable du processus de connexion et de déconnexion. Jetons d'abord un coup d'œil au processus de connexion :

Réponse après. connexion réussie Header contient Set-Cookie La Clé du cookie doit être cohérente avec la clé du cookie à déchiffrer définie dans le middleware des cookies. Ceci est montré dans la capture d'écran. La clé du cookie est IdentityCookie. Définissez le cookie et renvoyez une redirection 302 vers la page de connexion.

Lorsqu'elle est redirigée vers la page de connexion, la requête contient déjà un cookie avec la clé définie sur IdentityCookie.

Le processus de déconnexion est relativement simple, appelez HttpContext.Authentication Méthode .SignOutAsync pour se déconnecter, à ce moment Set-Cookie sera ajouté à HttpContext.Response, mais le contenu sera vide.

Dans .NET Core via CookieAuthenticationMiddleware est un middleware qui identifie les cookies liés à l'authentification dans HttpContext, ajoutant ainsi les informations d'authentification et d'autorisation de l'utilisateur . La chose la plus critique est l'objet ClaimsPrincipal, qui enregistre les informations d'authentification et d'autorisation de l'utilisateur (en plus de cela, bien sûr, il peut également contenir d'autres toutes les informations dont vous avez besoin comme vous pouvez le voir lors du processus de connexion). ci-dessus, une fois que l'utilisateur s'est connecté avec succès, les informations d'authentification et d'autorisation sont enregistrées dans l'objet ClaimsPrincipal (en fait, les informations d'authentification dans cette paire clé-valeur de cookie sont enregistrées sous ClaimsIdentity, et un ClaimsPrincipal peut contenir plusieurs ClaimsIdentity), puis ajoutez Set -Cookie aux en-têtes de HttpContext.Response, avec la clé Le CookieName et la valeur spécifiés dans le middleware Cookie sont la chaîne cryptée de cet objet. À l'avenir, HttpContext aura ce cookie. Le middleware de cookie supprimera le cookie qui correspond à ce CookieName, le décryptera et le restaurera dans l'objet ClaimsPrincipal, et définira HttpContext.User sur cet objet. Plus tard, lorsque le middleware MVC est routage vers le contrôleur et l'action correspondants, il peut archiver HttpContext.User en fonction de l'authentification et du rôle spécifiés dans l'autorisation. attribut. Si la vérification n’est pas satisfaite, passez à la page correspondante. Par conséquent, ce qu’il faut noter, c’est que le middleware Cookie doit être placé avant le middleware MVC.

ClaimsPrincipal mérite une mention spéciale ici. Un objet ClaimsPrincipal contient un ou plusieurs objets ClaimsIdentity. Un objet ClaimsIdentity correspond généralement à une certaine paire clé-valeur dans un Cookie (compréhension personnelle). Le middleware de cookies et ClaimsIdentity sont connectés via AuthenticationScheme. Lorsque nous écrivons notre propre service d'authentification plus tard, nous rendons également le AuthenticationScheme du middleware Cookie cohérent avec le ClaimsIdentity créé. Il est donc plus précis de dire que ClaimsIdentity contient des revendications pour l'authentification et les autorisations des utilisateurs, tandis que ClaimsPrincipal peut contenir plusieurs ClaimsIdentity. Lorsqu'il y a plusieurs middlewares Cookie dans le pipeline, ils se distinguent par AuthenticationScheme.

En plus d'AuthenticationScheme, il existe deux attributs plus importants dans ClaimsIdentity, UserType et RoleType, où UserType spécifie le type d'authentification de l'utilisateur et RoleType spécifie le type de vérification du rôle . Cela signifie que si je spécifie le RoleType comme "RoleName", alors lors de l'authentification du rôle, je rechercherai toutes les valeurs de type "RoleName" dans Claims et vérifierai si elles contiennent le RoleName spécifié dans Authorize. Cependant, .NET Core est fourni avec ClaimTypes et peut être utilisé directement. Par exemple, le type de rôle est ClaimTypes.Role. Si le ClaimTypes.Role intégré est utilisé lors de l'ajout d'un rôle, il n'est pas nécessaire de spécifier explicitement le RoleType lors de la création de ClaimsIdentity. L'authentification du rôle par défaut utilise ClaimTypes.Role.

L'ajout du middleware Cookie est implémenté via la méthode d'extension app.UseIdentity dans la méthode Configure au démarrage. Cette méthode d'extension ajoute en fait une variété de méthodes d'identification des cookies. Je n'en utiliserai qu'un lors de l'écriture ultérieure de ma propre gestion de l'authentification des utilisateurs.

0x04 Écrivez votre propre gestion de l'authentification des utilisateurs

Après avoir compris le processus d'authentification des utilisateurs, nous pouvons écrire notre propre gestion de l'authentification pour remplacer le composant d'identité, qui est également divisé en opérations de base de données et logique métier d'authentification . Je ne dirai pas grand-chose sur les bases de données. Elles sont toutes écrites dans la classe IdentityRepository, qui n'a que des opérations de données très simples. Pour plus de commodité, Dapper est utilisé et la base de données est Sqlite. Le programme vérifiera la table de la base de données au démarrage, et si ce n'est pas le cas, il créera automatiquement une table vide.

Le service d'authentification est également relativement simple. Il est écrit dans la classe IdentityService, qui fournit les opérations d'enregistrement et de connexion. La déconnexion est trop simple. Écrit directement dans Action. Pour plus de commodité, aucune page de gestion des rôles n'est fournie. Si vous souhaitez tester la fonction d'authentification des rôles, vous devez ajouter manuellement un rôle à la base de données, puis ajouter un rôle à l'utilisateur dans UserRoles.

Connexion :

S'inscrire :

Déconnexion :

Juste à titre de test, il existe de nombreux problèmes logiques, tels que le stockage en texte clair de mots de passe des utilisateurs. Focus sur le processus :)

0x05 Écrit à la fin

C'est la première fois que j'entre en contact avec des applicationsWeb , de nombreux concepts me sont peu familiers. Très compréhensif. Prenons l'exemple des utilisateurs d'authentification par cookies. Auparavant, je ne savais identifier les utilisateurs que via les cookies. J'ai toujours pensé qu'après avoir reçu les cookies, je trouverais les informations d'autorisation correspondantes dans la base de données ou le cache. Cependant, après avoir lu le code du middleware Cookie intégré, j'ai réalisé que les informations d'authentification sont directement stockées dans le Cookie, il suffit donc de les déchiffrer et de les désérialiser. L'assembly Identity implique de nombreux autres assemblys (Sécurité, HttpAbstraction, etc.), ce qui m'a donné le vertige. Finalement, j'ai finalement compris, mais je n'ai pas approfondi de nombreux détails. Une partie du contenu de l'article est basée sur du code. , et certains sont basés sur une compréhension personnelle, j'espère que tout le monde sera miséricordieux s'il y a des erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment gérer les caractères spéciaux dans la langue C Comment gérer les caractères spéciaux dans la langue C Apr 03, 2025 pm 03:18 PM

Dans le langage C, les caractères spéciaux sont traités à travers des séquences d'échappement, telles que: \ n représente les pauses de ligne. \ t signifie le caractère d'onglet. Utilisez des séquences d'échappement ou des constantes de caractères pour représenter des caractères spéciaux, tels que char c = '\ n'. Notez que l'arrière-plan doit être échappé deux fois. Différentes plates-formes et compilateurs peuvent avoir différentes séquences d'échappement, veuillez consulter la documentation.

Quel est le rôle de char dans les chaînes C Quel est le rôle de char dans les chaînes C Apr 03, 2025 pm 03:15 PM

En C, le type de char est utilisé dans les chaînes: 1. Stockez un seul caractère; 2. Utilisez un tableau pour représenter une chaîne et se terminer avec un terminateur nul; 3. Faire fonctionner via une fonction de fonctionnement de chaîne; 4. Lisez ou sortant une chaîne du clavier.

Comment utiliser divers symboles dans le langage C Comment utiliser divers symboles dans le langage C Apr 03, 2025 pm 04:48 PM

Les méthodes d'utilisation des symboles dans la couverture du langage C Couverture arithmétique, l'affectation, les conditions, la logique, les opérateurs de bits, etc. Les opérateurs arithmétiques sont utilisés pour les opérations mathématiques de base, les opérateurs d'affectation sont utilisés pour les opérations et les opérations de la soustraction, la multiplication et les opérations de division, les opérations BIT sont utilisé pointeurs nuls, marqueurs de fin de fichier et valeurs non nucères.

La différence entre char et wchar_t dans le langage C La différence entre char et wchar_t dans le langage C Apr 03, 2025 pm 03:09 PM

Dans le langage C, la principale différence entre Char et WCHAR_T est le codage des caractères: Char utilise ASCII ou étend ASCII, WCHAR_T utilise Unicode; Char prend 1 à 2 octets, WCHAR_T occupe 2-4 octets; Char convient au texte anglais, WCHAR_T convient au texte multilingue; Le char est largement pris en charge, WCHAR_T dépend de la prise en charge du compilateur et du système d'exploitation Unicode; Le char est limité dans la gamme de caractères, WCHAR_T a une gamme de caractères plus grande et des fonctions spéciales sont utilisées pour les opérations arithmétiques.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

Comment convertir le charbon dans la langue C Comment convertir le charbon dans la langue C Apr 03, 2025 pm 03:21 PM

Dans le langage C, la conversion de type char peut être directement convertie en un autre type par: Casting: Utilisation de caractères de casting. Conversion de type automatique: Lorsqu'un type de données peut accueillir un autre type de valeur, le compilateur le convertit automatiquement.

Comment utiliser Char Array dans la langue C Comment utiliser Char Array dans la langue C Apr 03, 2025 pm 03:24 PM

Le Array Char stocke des séquences de caractères en C et est déclaré Char Array_name [Taille]. L'élément d'accès est passé par l'opérateur d'indice, et l'élément se termine par le terminateur nul «\ 0», qui représente le point final de la chaîne. Le langage C fournit une variété de fonctions de manipulation de cordes, telles que strlen (), strcpy (), strcat () et strcmp ().

Quelle est la fonction de la somme du langage C? Quelle est la fonction de la somme du langage C? Apr 03, 2025 pm 02:21 PM

Il n'y a pas de fonction de somme intégrée dans le langage C, il doit donc être écrit par vous-même. La somme peut être obtenue en traversant le tableau et en accumulant des éléments: Version de boucle: la somme est calculée à l'aide de la longueur de boucle et du tableau. Version du pointeur: Utilisez des pointeurs pour pointer des éléments de tableau, et un résumé efficace est réalisé grâce à des pointeurs d'auto-incitation. Allouer dynamiquement la version du tableau: allouer dynamiquement les tableaux et gérer la mémoire vous-même, en veillant à ce que la mémoire allouée soit libérée pour empêcher les fuites de mémoire.

See all articles