Việc vận hành vấn đề singin, vấn đề người tiêu dùng hoặc quyền rồi xác nhận là 1 trong những phần không thể không có với bất kể khối hệ thống nào là. Các các bạn sẽ nên thực hiện đi làm việc lại nên vô nội dung bài viết này bản thân sẽ xây dựng dựng một Identity Service dùng IdentityServer4 và ASP.NET Identity sẽ giúp đỡ chúng ta hiểu rộng lớn về nó nhé.
Bất cứ phần mềm tiến bộ nào thì cũng chứa chấp thật nhiều bộ phận như: front-end tiện ích, back-end và những API tích hợp ý mặt mũi loại 3. Vậy tất cả chúng ta cần được lên kế hoạch việc chứng thực và cung cấp quyền (authentication và authorization) rời khỏi sao?
Bạn đang xem: asp.net identity là gì
ASP.NET Chip Core Identity là gì?
ASP.NET Chip Core Identity là 1 trong những tủ sách vận hành việc xác nhận và cung cấp quyền được sử dụng cho tới từng loại project kể từ MVC, WebForms cho tới WebAPI. Nó thỏa mãn nhu cầu những nhu yếu chủ yếu như sau:
- Dễ dàng tùy chỉnh profile của user
- Lưu trữ vấn đề user vô hạ tầng tài liệu dùng Entity Framework Code First.
- Hỗ trợ unit test
- Giới hạn quyền truy vấn theo dõi quyền
- Cung cung cấp hình thức thao tác làm việc với claim
Nếu vẫn với ASP.NET Identity cho tới việc Authentication và Authorization thì vì sao lại cần thiết IdentityServer4 nhỉ?
ASP.NET Identity rất có thể nhận một token bảo mật thông tin Lúc singin kể từ mặt mũi loại 3 như Facebook, Google, Microsoft và Twitter. Nhưng nếu như bạn thích tự động sinh rời khỏi mã token bảo mật thông tin cho những phần mềm nội cỗ của công ty tương tự bọn họ thì bạn phải với 1 tủ sách của mặt mũi loại 3 tương đương như IdentityServer4, OpenIddict.
Nếu thực hiện một phân tích nho nhỏ thì những bạn cũng có thể thấy là IdentityServer4 vô cùng thông dụng và hoặc được dùng làm thao tác làm việc này.
Vậy IdentityServer4 là gì?
IdentityServer4 là 1 trong những framework tương hỗ OpenID Connect và OAuth 2.0 bên trên ASP.NET Chip Core. Nó cũng là 1 trong những gói tủ sách bên trên Nuget được sử dụng vô ASP.NET Chip Core như 1 middleware được chấp nhận đăng nhập/đăng xuất, cung cấp token, xác nhận và những giáo thức chuẩn chỉnh không giống.
Để với ánh nhìn tổng quan liêu về bản vẽ xây dựng của chính nó, những bạn cũng có thể tham lam khảo thuật ngữ ở trang chủ của IdentityServer4:
Nguồn: http://docs.identityserver.io/en/latest/intro/terminology.html
- User: là loài người, là chúng ta hoặc tôi đang được dùng một client.
- Client: là 1 trong những ứng dụng phần mềm loại như trình duyệt trang web, mobile tiện ích hoặc bất kể vật gì đang được cần thiết gọi một API resource.
- Resources: là những API bạn phải bảo đảm vị IdentityServer4
- Access Token: nó là token được dùng nhằm truy vấn vô API Resource
- Refresh Token: từng một token đều phải có một thời hạn quá hạn sử dụng. Refresh token là sự việc lấy lại token mới nhất nhưng mà ko cần thiết tương tác của người tiêu dùng. Client nên được chấp nhận thực hiện điều này bằng phương pháp setup AllowOfflineAccess giá trị là true ở trong phần thiết đặt client vô IdentityServer4.
- Grant Type: nó là loại tương tác thân mật client và IdentityServer. Dựa bên trên client của công ty, rất có thể lựa chọn loại grant type tương thích.
Xây dựng Identity Service
You can see the following steps in the IdentityServer4 docs for more details. The last output will be a visual studio 2019 solution that contains:
- IdentityMicroservice (IdentityServer4 và ASP.NET Identity)
- ClientsProjects\SPAClient (Ứng dụng client SPA loại như Angular, React)
- ClientsProjects\WebClient (Ứng dụng client dạng Web MVC)
- ApiResrouceProjects\TestApiResource (Là một API cần thiết bảo vệ)
1- Identity Microservice Project Startup
Đây là project với trách móc nhiệm bảo v ệ API, thông số kỹ thuật những client và tàng trữ vấn đề user. Quý Khách rất có thể thấy mã mối cung cấp bên trên GitHub.
Here are the steps:
Tạo mới nhất một phần mềm ASP.NET CORE Web Application (Empty).
Cài đặt điều IdentityServer4 Templates bằng phương pháp thực đua mệnh lệnh sau:
dotnet new -i IdentityServer4.Templates
Thêm IdentityServer4 và QuickStart UI Files của chính nó (phần controller và view của Identity bao hàm singin, đăng ký…) với ASP.NET Identity Nuget packages vô project theo dõi câu mệnh lệnh sau:
dotnet new is4aspid --force
Với .NET Chip Core 3.1
Sau Lúc chạy mệnh lệnh bên trên, các bạn hãy chắc chắn là là gửi Project kể từ .NET Chip Core 3.0 lên .NET Chip Core 3.1 và update IdentityServer4 Nuget Package kể từ 3.0 lên 3.1, cũng chính vì thực đua mệnh lệnh tiếp tục tác động cho tới tệp tin .csproj và rất có thể tiếp tục downgrade phiên bạn dạng .NET Chip Core bên trên IdentityServer4.Template.
Bạn tiếp tục cần thiết mua sắm tủ sách Nuget packages:
"Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"
Bạn cần thiết quăng quật đi “Microsoft.AspNetCore.App” nuget package cũng chính vì nó ko cần thiết bên trên .NET Chip Core 3.1. Nó sẽ gây ra lỗi cho ApplicationDbContext và Startup.cs cũng chính vì nó thiếu thốn các Nuget packages, bạn phải mua sắm thêm:
- Microsoft.AspNetCore.Identity.EntityFrameworkCore 3.1.0
- Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore 3.1.0
Bạn tiếp tục nhận warning message IHostingEnvironment cũng chính vì interface này được thay cho thế vô.NET Chip Core 3.1 bởi IWebHostEnvironment.
Trong ConfigureServices() của Startup.cs thêm:
//services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1);
services.AddControllersWithViews();
Trong Configure() của Startup.cs chúng ta cần điều hỉnh 1 chút:
app.UseRouting();
// Block 4:
// UseIdentityServer include a gọi vĩ đại UseAuthentication
tiện ích.UseIdentityServer();
tiện ích.UseAuthorization();
//app.UseMvcWithDefaultRoute();
tiện ích.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Sau ê build lại project và đánh giá lại
2- Cấu hình Identity MicroService Project
2 tệp tin chủ yếu nhưng mà bạn phải chỉnh sửa:
- Config.cs
- Startup.cs
Định nghĩa vấn đề client và resource
Nguồn: http://docs.identityserver.io/en/latest/intro/big_picture.html (modified version)
IdentityServer4 cho chính mình 2 lựa lựa chọn nhằm thông số kỹ thuật. Quý Khách rất có thể dùng thông số kỹ thuật InMemory hoặc dùng database nhằm tàng trữ. Trong ví dụ này bản thân tiếp tục người sử dụng InMemory. Tức là list client hoặc list resource rất có thể tùy chọn lựa thêm vô database của Identity Server hoặc luôn luôn vô code InMemory. Trong database thì tất cả chúng ta tiếp tục dễ dàng sửa đổi bổ sung cập nhật rộng lớn rồi đúng không nhỉ nào?
Xem thêm: smoked paprika là gì
Trong Config.cs tệp tin các bạn sẽ khái niệm list API resources nhưng mà bạn thích bảo đảm và list những client nhưng mà bạn thích được chấp nhận truy vấn vô resource. tệp tin này sẽ tiến hành người sử dụng vô bước tiếp theo sau ở Startup.cs
Trong kịch bạn dạng thực tiễn của công ty, chúng ta nên dùng thông số kỹ thuật dạng database. IdentityServer4 vẫn với hỗ trợ SQL Server dùng EntityFramework Core. Trong ví dụ này, Config.cs tệp tin tiếp tục như sau:
// Block 1: All APIs, I want vĩ đại protect in my system
public static IEnumerable GetApis()
{
return new ApiResource[]
{
new ApiResource("identity.api", "Identity API"),
new ApiResource("test.api","Test API")
};
}
public static IEnumerable GetClients()
{
return new[]
{
//Block 2: MVC client using hybrid flow
new Client
{
ClientId = "webclient",
ClientName = "Web Client",
RequireConsent = false,
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) },
RedirectUris = { "https://localhost:5002/signin-oidc" },
FrontChannelLogoutUri = "https://localhost:5002/signout-oidc",
PostLogoutRedirectUris = { "https://localhost:5002/signout-callback-oidc" },
AllowOfflineAccess = true,
AllowedScopes = { "openid", "profile", "identity.api","test.api" }
},
//Block 3: SPA client using Code flow
new Client
{
ClientId = "spaclient",
ClientName = "SPA Client",
ClientUri = "https://localhost:5003",
RequireConsent = false,
AllowedGrantTypes = GrantTypes.Code,
RequirePkce = true,
RequireClientSecret = false,
AllowAccessTokensViaBrowser = true,
RedirectUris =
{
"https://localhost:5003/index.html",
"https://localhost:5003/callback.html"
},
PostLogoutRedirectUris = { "https://localhost:5003/index.html" },
AllowedCorsOrigins = { "https://localhost:5003" },
AllowedScopes = { "openid", "profile", "identity.api" ,"test.api" }
}
};
}
Thêm IdentityServer4 và Asp.NET Identity vô middleware
Startup.cs class được gọi Lúc phần mềm chạy. Nó với 2 cách thức, ConfigureServices() tiếp tục ĐK những service vô DI Container được sử dụng vô phần mềm còn Configure() thì nhằm thông số kỹ thuật Request Pipeline:
public void ConfigureServices(IServiceCollection services)
{
//TODO: change UseSqlite vĩ đại UseSqlServer
services.AddDbContext(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
// Block 1: Add ASP.NET Identity
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
// Block 2: Add IdentityServer4 with InMemory Configuration
var builder = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
})
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApis())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity();
//some code is not mentioend here for the sake of brevity
services.AddAuthentication();
}
public void Configure(IApplicationBuilder app)
{
if (Environment.EnvironmentName == "Development")
{
tiện ích.UseDeveloperExceptionPage();
tiện ích.UseDatabaseErrorPage();
}
else
{
tiện ích.UseExceptionHandler("/Home/Error");
}
tiện ích.UseStaticFiles();
tiện ích.UseRouting();
// Block 4:
// UseIdentityServer include a gọi vĩ đại UseAuthentication
tiện ích.UseIdentityServer();
tiện ích.UseAuthorization();
//app.UseMvcWithDefaultRoute();
tiện ích.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
Sau Lúc cấu hình Identity service project, hãy gửi sang trọng cấu hình API và Clients
3- Configuring Web Client Project
Như chúng ta thấy phía trái của hình họa bên trên bạn cũng có thể thông số kỹ thuật dùng OpenIdConnect bằng sự việc cung ứng vấn đề client và được lưu vô IdentityService.
Link xác nhận là 1 trong những links public của IdentityService. Grant type là hybrid nó là trình diễn cả hoặc flow ngầm quyết định và hình thức xác thực quyền. Nó được khuyến nghị grant type cho tới phần mềm trang web phía server và mobile ap.
4 - Cấu hình Single Page Application Project
SPA là phần mềm client chúng ta nên thiết đặt tủ sách Javascript OpenIdConnect sau ê tăng nó vô trang HTML.
Grant Type là authorization-code với PKCE. Chi tiết tại đây
5- Cấu hình Test API Resource Project
Ở ở bên phải, tôi khái niệm một API Resource vô IdentityServer4 vị một thương hiệu độc nhất và một label.
Bên trái khoáy là tôi tăng vấn đề xác nhận vô API Resource Startup class. Sau ê tôi nhảy tác dụng CORS để được chấp nhận những client rất có thể gọi cho tới API.
Trong cách thức Configure(), tôi dùng thông số kỹ thuật Auth và CORS "default" được khái niệm từ xưa. (Chú ý dùng thông số kỹ thuật authentication vô request pipeline trước MVC)
Chạy toàn bộ ứng dụng
Để chạy nhiều project một khi vô Visual Studio bạn phải vào Solution’s Properties > Common Properties > Startup Project
Tốt rộng lớn không còn nên nhằm IdentityMicroservice lên chạy trước tiên.
Khi chúng ta clone repo code, các bạn sẽ thấy tệp tin lauchSettings.json trong những project. File này thông thường bị bỏ dở và khong include vô repo.
Xem thêm: ei là gì
Tôi vẫn thêm launchsettings.json và dùng cổng tương tự động như trong Config.cs tệp tin. Các cổng ê là:
- Identity Microservice ở port 5000
- Test Api Resource ở port 5001
- Web Client ở port 5002
- SPA Client ở port 5003
Giờ bạn cũng có thể chạy solution, bạn cũng có thể người sử dụng test user được tạo nên vô tệp tin SeedData.cs vô SQLite database nhằm dùng lưu trưc user data.
Trích mối cung cấp từ: (https://feras.blog/how-to-use-asp-net-identity-and-identityserver4-in-your-solution/)
Bình luận