Sign-in API with Multiple Auth Provider in ASP.NET Core from scratch – Part 1

Như bạn biết có nhiều trang web mà bạn có thể sử dụng bằng email & password hoặc sử dụng tài khoản Facebook, Google… để đăng nhập. Không chỉ riêng web mà các ứng dụng mobile cũng có thể thiết kế tính năng đăng nhập hỗ trợ nhiều lựa chọn như vậy để tối ưu hóa bước đăng nhập cho người dùng cuối.

Phần lớn việc truy cập dữ liệu từ ứng dụng mobile đế hệ thống của bạn đều thông qua API và chúng thường được bảo vệ bằng các phương thức khác nhau, cơ bản trong số đó có dạng bảo về theo JWT, thông qua việc gọi các API đăng nhập bạn sẽ nhận được một token và dùng token đó mới có thể truy cập các API khác.

Vậy làm thế nào để tạo được API đăng nhập hỗ trợ nhiều lựa chọn như trên? Chuỗi bài viết sau sẽ hướng dẫn cấu hình và chạy thử trên môi trường mobile:

Và đây là phần đầu tiên

Cấu hình Identity Server

Bước 1: Tạo project ASP.NET Core Application

Ở đây mình sử dụng Visual Studio 2019, tạo mới một project ASP.NET Core Application

Mình đặt tên là MiniBook.Identity và ở bước chọn template mình chọn Empty

Bước 2: Cài đặt AspNetCore.Identity

Tạo một SQL Server Database và thêm connection string vào appsettings.json. Ở đây mình sử dụng local database (cài đặt cùng với Visual Studio)


Cài đặt nuget: Microsoft.AspNetCore.Identity, là membership system, hỗ trợ bạn quản lý user, role, mã hóa mật khẩu, xác thực thông tin đăng nhập…

Tạo các folder và class sau:

MiniBook.Identity
—Data
——Models
———User.cs
——MinibookDbContext.cs

Mở file Startup.cs và thêm các cấu hình sau:

Mở Package Manager Console, chạy lệnh migration

dotnet ef migrations add "Init" -o "Data/Migrations" --project MiniBook.Identity
dotnet ef database update --project MiniBook.Identity

Nếu thành công bạn sẽ được mớ table và class sau

Bước 3: Tạo API đăng ký tài khoản đơn giản

Tạo controller và api đăng ký tài khoản mới

Bạn có thể test thử với Postman (project mình run trên localhost:63286)

Nếu đăng ký tài khoản thành công, thông tin user sẽ được lưu lại trên 2 table là User và UserClaims như thế này

Bước 3: Cấu hình IdentityServer4

Cài đặt nuget IdentityServer4 IdentityServer4.AspNetIdentity, đây là thư viện hỗ trợ bạn build một identity server theo chuẩn OAuth 2.0

Thêm cấu hình cho Identity Server (do là demo nên mình cấu hình bằng code, đối với dự án thực bạn có thể cài đặt và cầu hình bằng database, xem tại đây), thêm file Config.cs vào như sau

Mình cũng có video giải thích cái mớ này, bạn có thể xem thêm tại:

Mở file Startup.cs thêm vào các cấu hình sau

Test thử sign-in api với tài khoản đã tạo, đường dẫn mặc định của idsrv4 là /connect/token

Nếu thành công bạn server sẽ trả cho bạn một cái access_token như trên. Token này sẽ được ứng dụng sử dụng để có thể gọi được các api trong hệ thống của bạn.

Vậy tới đây bạn đã hoàn tất được phần đầu tiên là cấu hình được
Identity server cơ bản.

Chúc bạn thành công.