1. Trang chủ
  2. » Tất cả

Lab final JWT authentication in ASP NET core web API

10 18 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 1,06 MB

Nội dung

Tài liệu thực hành ASP NET Core Web API IT Research Department BKAP 2022 Page | 1 JWT Authentication in ASP NET Core Web API Mục tiêu ● Tạo database Hanam88Service ● Tạo ứng dụng ASP NET Core Web API.

Tài liệu thực hành ASP.NET Core Web API JWT Authentication in ASP.NET Core Web API Mục tiêu ● Tạo database Hanam88Service ● Tạo ứng dụng ASP.NET Core Web API ● Sử dung Entity Framework (Database First) ● Cấu hình JWT ● Login sinh Token ● Cấu hình Authorize vào ProductController ● Test với Postman Step 1: Mở SQL Server 2012 cao chạy đoạn kịch để tạo sở liệu Create Database Hanam88Service go use Hanam88Service go TẠO BẢNG LOẠI SẢN PHẨM Create table Category ( CategoryId int identity primary key, CategoryName nvarchar(200) ) go -dữ liệu insert into Category values(N'Kính') insert into Category values(N'Ví da') insert into Category values(N'Giầy Dép') insert into Category values(N'Quần áo') go TẠO BẢNG SẢN PHẨM Create table Product ( ProductId varchar(16) primary key, ProductName nvarchar(128), CategoryId int foreign key references Category(CategoryId) null, Picture nvarchar(512), Price float, Note nvarchar(max) ) go IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API Create table Account ( AccountId varchar(36) primary key, Username varchar(32), Password varchar(256), Email varchar(128), FullName nvarchar(64) ) go insert into Account values(NEWID(),'hanam88',lower(CONVERT(VARCHAR(32), HashBytes('md5', '123456'), 2)),'hanam88.congdong@gmail.com','Charles Chung') insert into Product values('AN001',N'Áo sơ mi',4,'',120000,N''); insert into Product values('BN002',N'Bộ đồ công sở trắng',4,'',140000,N''); insert into Product values('BN003',N'Bộ đồ công sở kẻ caro',4,'',80000,N''); insert into Product values('DN334',N'Đầm Bbd Thuỷ Thủ 334',4,'',160000,N''); insert into Product values('DN332',N'Đầm Bbd Thuỷ Thủ 332',4,'',180000,N''); insert into Product values('QJ119',N'Quần Jean Dài Nữ 13 ( 119)',4,'',180000,N''); insert into Product values('AC331',N'Set Caro 331',4,'',190000,N''); insert into Product values('QL54',N'Quần Legging Asos Nâng Mông Đen 54',4,'',120000,N''); insert into Product values('QD296',N'Quần Dài Đen + Áo Voan 296',4,'',145000,N''); insert into Product values('SM449',N'Sơ Mi Chấm Bi Khoét Vai 449',4,'',85000,N''); insert into Product values('VN009',N'Ví nữ dài họa tiết gấu da mềm đẹp 009',2,'',65000,N''); insert into Product values('VN001',N'Ví forever young đa di năng',2,'',65000,N''); insert into Product values('TV103',N'Ví Nữ Mini Da Thật Nhiều Ngăn TV103',2,'',500000,N''); insert into Product values('VN209',N'Ví Nữ Ngắn Da Bị Thật Cao Cấp Sáp Dầu Bóng Đẹp Thương Hiệu Chính Hãng Banyanu',2,'',185000,N''); Step 2: Mở Visual Studio 2017 -> Tạo ứng dụng ASP.NET Core Web Application IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API - Chọn thơng số hình nhận OK IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API Step 3: Tạo thư mục Models Project Step 4: Vào menu Tools -> NuGet Package Manager -> Package Manager Console gõ lệnh hình nhấn Enter để kết nối database sinh Entity DbContext Step 5: Mở tệp Hanam88ServiceContext.cs thư mục Models xóa đoạn code hình Step 6: Mở tệp appsettings.json nhập thơng số cấu sau IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "Hanam88ConnectSQL": "Server=localhost;database=Hanam88WebAPI;uid=sa;pwd=1234$;MultipleActiveResultSets=Tr ue" }, "Jwt": { "Issuer": "hanam88.com", "Audience": "sinhvienbkap", "Key": "demo_jwt_security_for_sinhvienbkap" } } Step 7: Mở tệp Startup.cs tìm phương thức ConfigureServices bổ sung code cấu hình ứng dụng khởi động sau //lấy key tệp cấu hình var key = Configuration["Jwt:Key"]; //mã hóa key var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)); //Add Authentication Bearer services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { //có kiểm tra Issuer (default true) ValidateIssuer = true, ValidIssuer = Configuration["Jwt:Issuer"], //có kiểm tra Audience (default true) ValidateAudience = true, ValidAudience = Configuration["Jwt:Audience"], //Đảm bảo phải có thời gian hết hạn token RequireExpirationTime = true, ValidateLifetime = true, //Chỉ key sử dụng token IssuerSigningKey = signingKey, RequireSignedTokens = true }; }); services.AddDbContext( options => options.UseSqlServer(Configuration.GetConnectionString("Hanam88ConnectSQL"))); Tìm phương thức Configure bổ sung dịng sau vào trước lệnh app.UseMvc() //sử dụng tính Authentication app.UseAuthentication(); IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API Step 8: Tạo lớp UserModel thư mục Models public class UserModel { public string Username { get; set; } public string Password { get; set; } } Step 9: Trong thư mục Controllers xóa tệp ValuesController tạo Controller có tên AccountController code sau [Route("api/[controller]")] [ApiController] public class AccountController : ControllerBase { Hanam88WebAPIContext db; IConfiguration config; public AccountController(Hanam88WebAPIContext db, IConfiguration config) { this.db = db; this.config = config; } [HttpPost("login")] public IActionResult Login([FromBody] UserModel model) { //mã hóa password thành chuỗi MD5 var password_md5 = GenerateMD5(model.Password); //lấy người dùng db var user = db.Account.FirstOrDefault(x => x.Username == model.Username && x.Password == password_md5); //nếu tồn xử lý sing token if (user != null) { //lấy key file cấu hình var key = config["Jwt:Key"]; //mã hóa ky var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)); //ký vào key mã hóa var signingCredential = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); //tạo claims chứa thông tin người dùng (nếu cần) var claims = new List { new Claim(ClaimTypes.Role,"Admin"), new Claim(ClaimTypes.Name,model.Username), new Claim(ClaimTypes.MobilePhone,"0961902588"), new Claim(ClaimTypes.Country,"Vietnam"), }; //tạo token với thông số khớp với cấu hình startup để validate var token = new JwtSecurityToken ( issuer: config["Jwt:Issuer"], audience: config["Jwt:Audience"], expires: DateTime.Now.AddHours(1), signingCredentials: signingCredential, IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API claims: claims ); //sinh chuỗi token với thông số var hanam88token = new JwtSecurityTokenHandler().WriteToken(token); //trả kết cho client username chuỗi token return new JsonResult(new { username = model.Username, token = hanam88token }); } //trả lỗi return new JsonResult(new { message = "Đăng nhập sai" }); } //hàm mã hóa chuỗi sử dụng MD5 private string GenerateMD5(string input) { // Step 1, calculate MD5 hash from input MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); // Step 2, convert byte array to hex string StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("x2")); } return sb.ToString(); } //lấy thông tin claims sau login [Authorize] [HttpGet("GetClaim")] public IActionResult GetClaims() { var claims = from c in User.Claims select new {Type=c.Type.Substring(c.Type.LastIndexOf("/")+1), c.Value }; return new JsonResult(claims); } [Authorize(Roles ="admin")] [HttpGet("GetAccount")] public IActionResult GetAccount() { return new JsonResult(new { message = "Xin chào Admin" }); } } Step 10: Trong thư mục Controllers tạo Controller có tên ProductController code sau [Route("api/[controller]")] [ApiController] [Authorize] public class ProductController : ControllerBase { //khai báo đối tượng context Hanam88WebAPIContext db; //phương thức constructor khởi tạo context IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API //(do cấu hình startup nên asp.net core tự khởi tạo DbContext nhận qua constructor) //tìm hiểu dependency inject net public ProductController(Hanam88WebAPIContext db) { this.db = db; } public IActionResult GetProducts() { return new JsonResult(db.Product); } } Step 11: Cài công cụ postman lên để test - Test UnAuthorize - Login để lấy token IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API Nhập thông tin sai Nhập thông tin IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP.NET Core Web API - Test gửi Token để truy cập tài nguyên hạn chế (Protected Resource) THE END IT Research Department @BKAP 2022 Page | 10 ... Hanam88WebAPIContext db; //phương thức constructor khởi tạo context IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP. NET Core Web API //(do cấu hình startup nên asp. net core tự... Step 2: Mở Visual Studio 2017 -> Tạo ứng dụng ASP. NET Core Web Application IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP. NET Core Web API - Chọn thơng số hình nhận OK IT Research... 6: Mở tệp appsettings.json nhập thơng số cấu sau IT Research Department @BKAP 2022 Page | Tài liệu thực hành ASP. NET Core Web API { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts":

Ngày đăng: 07/11/2022, 14:52

TỪ KHÓA LIÊN QUAN

w