search
HomeBackend DevelopmentC#.Net Tutorial.NET Core certification management analysis

Authentication management analysis in .NET Core

0x00 Source of the problem

When creating a new .NET Core Web project Select "Use personal user account" to create a project with users and permission management. Many pages such as user registration and login are ready. You can also use AuthorizeAttribute to perform various tasks. This kind of permission management seems to be very convenient. But I'm at a loss as to what the generated code does for me. After looking at the generated data table, the functions are quite complicated. In fact, all I need is authentication management based on users and roles, and user information uses existing libraries. However, using the authentication component that comes with .NET Core must rely on EF, and many table structures do not match up, so I need to learn I implemented the built-in authentication component, and then wrote my own authenticationservicereplaced the Identity component, and Cookiemanaged using the built-in Cookiemiddleware , you can use AuthorizeAttribute for authentication. I haven’t encountered complex requirements yet, so I just learned here. This blog focuses on user- and role-based authentication in the simplest case. For some basic usage of .NET Core’s built-in authentication components, please refer to http://www.php.cn/.

0x01 Authentication management in .NET Core

When it comes to authentication management, what comes to mind is user registration, login, logout and adding/ to users Delete roles and other functions. User information, role information, etc. are all stored in the database. So it mainly includes two parts: Database operation and login business logic. At the login business logic level, .NET Core is mainly managed through three core classes UserManager, RoleManager, and SigninManager (in the Microsoft.AspNetCore.Identity assembly). Among them:

  • UserManager is mainly responsible for user authentication, registration, modification, deletion, and management of user-related roles, tokens, claims, etc.

  • RoleManager is responsible for the management of roles and role-related statements.

  • #SigninManager is responsible for login, logout and other related operations. When user operations are involved (such as user verification during login), UserManager will be called to perform operations.

When these three core classes operate the database, they use UserStore and RoleStore at the database level (in the Microsoft.AspNetCore.Identity.EntityFrameworkCore assembly). The business relationship is shown in the figure below:

We can use these three core classes when developing authentication-related functions. Most needs. When we use the objects of these core classes, they are obtained through dependency injection. So when are these related dependencies injected? There is an AddIdentity extension method in the ConfigureServices method of Startup, in which all required dependencies are added.

##0x02 Login and logout

After understanding the overall division of labor of the Identity component, let’s take a look at login and partial details of the logout operation. The login and logout process is mainly responsible for SigninManager. Let’s take a look at the login process first:

Response after successful login Header contains Set-Cookie. The Key of the Cookie needs to be consistent with the Key of the Cookie to be decrypted set in the Cookie middleware. This is shown in the screenshot. The Key of Cookie is IdentityCookie. Set the cookie and return a 302 redirect to the login page.

When redirected to the login page, the request already contains a cookie with the key set to IdentityCookie.

The logout process is relatively simple, call HttpContext.Authentication.SignOutAsync method to log out. At this time, Set-Cookie will be added to HttpContext.Response, but the content will be empty.

Pass CookieAuthenticationMiddl## in .NET Core #eware This middleware identifies authentication-related cookies in the HttpContext, thereby adding the user's authentication and authorization information. The most critical thing is the ClaimsPrincipal object, which records the user's authentication and authorization information (in addition to this, of course it can also contain otherany information you need). As you can see from the login process above, after the user successfully logs in The authentication and authorization information is saved to the ClaimsPrincipal object (actually, the authentication information in this Cookie key-value pair is saved as ClaimsIdentity, and one ClaimsPrincipal can contain multiple ClaimsIdentity), and then add Set-Cookie to the Headers of HttpContext.Response, with the Key The CookieName and Value specified in the Cookie middleware are the encrypted string of this object. In the future, HttpContext will have this cookie. The cookie middleware will take out the cookie that matches this CookieName, decrypt and restore it to the ClaimsPrincipal object, and set HttpContext.User to this object. Later MVC middleware can check in HttpContext.User based on the authentication and role specified in the Authorize attribute when routing to the corresponding Controller and Action. If the check is not satisfied, it will jump to the corresponding page. Therefore, what needs to be noted is that the Cookie middleware must be placed before the MVC middleware.

We need to talk about ClaimsPrincipal in particular. A ClaimsPrincipal object contains one or more ClaimsIdentity objects. A ClaimsIdentity object generally corresponds to a certain key-value pair in a Cookie (personal understanding). Cookie middleware and ClaimsIdentity are connected through AuthenticationScheme. When we write our own authentication service later, we also make the AuthenticationScheme of the Cookie middleware consistent with the created ClaimsIdentity. So it is more accurate to say that ClaimsIdentity contains claims for user authentication and permissions, while ClaimsPrincipal can contain multiple ClaimsIdentity. When there are multiple Cookie middlewares in the pipeline, they are distinguished by AuthenticationScheme.

In addition to AuthenticationScheme, there are two more important attributes in ClaimsIdentity, UserType and RoleType, where UserType specifies the user authentication type and RoleType specifies the role verification type. This means that if I specify the RoleType as "RoleName", then during role authentication, I will look for all values ​​of Type "RoleName" in Claims and check whether they contain the RoleName specified in Authorize. However, .NET Core comes with ClaimTypes and can be used directly. For example, the role type is ClaimTypes.Role. If you use the built-in ClaimTypes.Role when adding a role, you do not need to explicitly specify the RoleType when creating ClaimsIdentity. The default role authentication uses ClaimTypes.Role.

The addition of Cookie middleware is implemented through the app.UseIdentity extension method in the Configure method in Startup. This extension method actually adds a variety of cookie identification methods. I will only use one when writing my own user authentication management later.

0x04 Write your own user authentication management

After understanding the user authentication process, we can write our own authentication management to replace the Identity component, which is also divided into database operations and authentication business logic. I won’t say much about the database. I have written it all in the IdentityRepository class, which only has very simple data operations. For convenience, Dapper is used, and the database is Sqlite. The program will check the database table when it starts, and if it does not, it will automatically create an empty table.

The authentication service is also relatively simple. It is written in the IdentityService class, which provides registration and login operations. Logout is too simple. Written directly in Action. For convenience, no role management page is provided. If you want to test the role authentication function, you need to manually add Role to the database, and then add Role to the user in UserRoles.

log in Register:

Logout:

Just for testing, there are many logical problems, such as clear text storage of user passwords. Focus on the process:)

0x05

Written at the end

cache

. However, after reading the built-in Cookie middleware code, I realized that the authentication information is directly stored in the Cookie, so it only needs to be decrypted and deserialized. The Identity assembly involves many other assemblies (Security, HttpAbstraction, etc.), which made me dizzy. Finally, I finally figured it out, but I didn’t delve into many details. Some of the content in the article is based on code, and some is based on personal understanding. , I hope everyone will be merciful if there are any mistakes.

The above is the detailed content of .NET Core certification management analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
From Web to Desktop: The Versatility of C# .NETFrom Web to Desktop: The Versatility of C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# .NET and the Future: Adapting to New TechnologiesC# .NET and the Future: Adapting to New TechnologiesApr 14, 2025 am 12:06 AM

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

Is C# .NET Right for You? Evaluating its ApplicabilityIs C# .NET Right for You? Evaluating its ApplicabilityApr 13, 2025 am 12:03 AM

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

C# Code within .NET: Exploring the Programming ProcessC# Code within .NET: Exploring the Programming ProcessApr 12, 2025 am 12:02 AM

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

C# .NET: Exploring Core Concepts and Programming FundamentalsC# .NET: Exploring Core Concepts and Programming FundamentalsApr 10, 2025 am 09:32 AM

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

Testing C# .NET Applications: Unit, Integration, and End-to-End TestingTesting C# .NET Applications: Unit, Integration, and End-to-End TestingApr 09, 2025 am 12:04 AM

Testing strategies for C#.NET applications include unit testing, integration testing, and end-to-end testing. 1. Unit testing ensures that the minimum unit of the code works independently, using the MSTest, NUnit or xUnit framework. 2. Integrated tests verify the functions of multiple units combined, commonly used simulated data and external services. 3. End-to-end testing simulates the user's complete operation process, and Selenium is usually used for automated testing.

Advanced C# .NET Tutorial: Ace Your Next Senior Developer InterviewAdvanced C# .NET Tutorial: Ace Your Next Senior Developer InterviewApr 08, 2025 am 12:06 AM

Interview with C# senior developer requires mastering core knowledge such as asynchronous programming, LINQ, and internal working principles of .NET frameworks. 1. Asynchronous programming simplifies operations through async and await to improve application responsiveness. 2.LINQ operates data in SQL style and pay attention to performance. 3. The CLR of the NET framework manages memory, and garbage collection needs to be used with caution.

C# .NET Interview Questions & Answers: Level Up Your ExpertiseC# .NET Interview Questions & Answers: Level Up Your ExpertiseApr 07, 2025 am 12:01 AM

C#.NET interview questions and answers include basic knowledge, core concepts, and advanced usage. 1) Basic knowledge: C# is an object-oriented language developed by Microsoft and is mainly used in the .NET framework. 2) Core concepts: Delegation and events allow dynamic binding methods, and LINQ provides powerful query functions. 3) Advanced usage: Asynchronous programming improves responsiveness, and expression trees are used for dynamic code construction.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.