- 124
- 202 092
Học lập trình cùng Nam
Norway
เข้าร่วมเมื่อ 18 มิ.ย. 2023
Kho kiến thức dành cho người làm phần mềm chuyên nghiệp đến từ Nam - một developer chuyên nghiệp sống tại Na Uy với hơn 25 năm kinh nghiệm.
Nội dung trải rộng từ ngôn ngữ lập trình, lập trình mạng, phân tích và thiết kế hệ thống, kiến trúc phần mềm, hệ điều hành, lập trình .NET...
Lưu ý: Các video dành cho hội viên đều yêu cầu VIP member !!!
Nội dung trải rộng từ ngôn ngữ lập trình, lập trình mạng, phân tích và thiết kế hệ thống, kiến trúc phần mềm, hệ điều hành, lập trình .NET...
Lưu ý: Các video dành cho hội viên đều yêu cầu VIP member !!!
ASP.NET - Phần 26 - Sử dụng cache trong ASP.NET
Các bạn nên xem trước bài 28 trong loạt bài Học lập trình .NET cơ bản trước khi xem bài này.
มุมมอง: 315
วีดีโอ
ASP.NET - Phần 25 - Rate Limiting
มุมมอง 648วันที่ผ่านมา
Đọc thêm: devblogs.microsoft.com/dotnet/announcing-rate-limiting-for-dotnet/ Tải bombardier: github.com/codesenberg/bombardier/releases
ASP.NET - 24 - Sử dụng CORS
มุมมอง 497วันที่ผ่านมา
Trong bài này chúng ta sẽ tìm hiểu CORS là gì, tại sao chúng ta cần nó và cách cấu hình CORS trong ASP.NET.
ASP.NET - Phần 23 - Giải bài tập: viết một OpenIdConnect server, phần 2
มุมมอง 26314 วันที่ผ่านมา
Link đến project: github.com/daohainam/lets-learn-aspnet/tree/main/Projects/MyOidcServer
ASP.NET - Phần 22 - Giải bài tập: viết một OpenIdConnect server, phần 1
มุมมอง 46914 วันที่ผ่านมา
Phần 1: Tìm hiểu giao thức OpenIdConnect và xây dựng bộ khung ban đầu. Link trong bài: - learn.microsoft.com/en-us/aspnet/core/security/authentication/configure-oidc-web-authentication?view=aspnetcore-8.0 - openid.net/developers/how-connect-works/ - Đặc tả: openid.net/specs/openid-connect-core-1_0.html - Tạo key: mkjwk.org/
ASP.NET - Phần 21 - Policy-based Authorization
มุมมอง 90121 วันที่ผ่านมา
Đọc thêm về policy-based authorization: learn.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-8.0 Mã nguồn trong clip: github.com/daohainam/lets-learn-aspnet/tree/eec28fb9f1f7249d649abf77638c569494365088/Projects/JwtDemo
ASP.NET - Phần 20 - Role-based Authorization
มุมมอง 57728 วันที่ผ่านมา
ASP.NET - Phần 20 - Role-based Authorization
Không phải lúc nào cũng cần gọi await
มุมมอง 1.6Kหลายเดือนก่อน
Project được sử dụng trong clip: github.com/daohainam/asyncdemo/tree/master/CallingAsyncDemo
ASP.NET - Phần 19 - Authentication với Json Web Token (JwtBearer)
มุมมอง 875หลายเดือนก่อน
Khuyến khích xem thêm: th-cam.com/play/PLRLJQuuRRcFncdTYQPLuWnFFP0mMHwMxu.html
ASP.NET - Phần 18 - Chương trình đầu tiên với authentication và authorization
มุมมอง 969หลายเดือนก่อน
!!! Quan trọng: nhớ xem bài trước khi xem bài này !!! Link chương trình: github.com/daohainam/lets-learn-aspnet/tree/4bbf5e0f6449d7486d1e1b0bf2f8b6df5e5193e1/Projects/SecurityDemo
ASP.NET - Phần 17 - Giới thiệu các khái niệm trong Authentication và Authorization
มุมมอง 692หลายเดือนก่อน
Trong bài này chúng ta làm quen với Authentication và Authorization trong ASP.NET, chúng ta cần nắm các khái niệm này để có thể hiểu cách hoạt động và sử dụng trong các phần sau. Tham khảo thêm: th-cam.com/play/PLRLJQuuRRcFncdTYQPLuWnFFP0mMHwMxu.html
ASP.NET - Phần 16 - Https Redirection
มุมมอง 465หลายเดือนก่อน
Link tài liệu trong bài: learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl Link code MyHttpsRedirectionMiddleware: github.com/daohainam/lets-learn-aspnet/tree/main/Projects/MiddlewareDemo/Middleware
ASP.NET - Phần 15 - Session
มุมมอง 7322 หลายเดือนก่อน
Trong bài này chúng ta sẽ học Session là gì, cách thức hoạt động và cách sử dụng trong ASP.NET. Chúng ta cũng demo việc xóa, copy session cookie, cũng như cấu hình để lưu trữ session vào trong Sql Server. learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0#session-state
ASP.NET - Phần 14 - Model binding
มุมมอง 2872 หลายเดือนก่อน
learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-8.0
ASP.NET - Phần 13 - Thực hành viết một middleware
มุมมอง 8552 หลายเดือนก่อน
Nhiệm vụ: Viết một middleware xác thực client thông qua API Key và lấy về thông tin client. Project: github.com/daohainam/lets-learn-aspnet/tree/d6a5b28ff410ac5cedbf37ab5d883085a2933fe3/Projects/MiddlewareDemo
ASP.NET - Phần 12 - Giới thiệu về Middleware
มุมมอง 7302 หลายเดือนก่อน
ASP.NET - Phần 12 - Giới thiệu về Middleware
ASP.NET - Phần 11 - Configuration và Options pattern
มุมมอง 6332 หลายเดือนก่อน
ASP.NET - Phần 11 - Configuration và Options pattern
ASP.NET - Phần 10 - Bài tập: Nâng cấp ứng dụng MySession và thêm integration test
มุมมอง 4482 หลายเดือนก่อน
ASP.NET - Phần 10 - Bài tập: Nâng cấp ứng dụng MySession và thêm integration test
ASP.NET - Phần 9 - Bài tập: clone lại tính năng Session của ASP.NET
มุมมอง 9002 หลายเดือนก่อน
ASP.NET - Phần 9 - Bài tập: clone lại tính năng Session của ASP.NET
ASP.NET - Phần 8 - Làm việc với HttpResponse
มุมมอง 7333 หลายเดือนก่อน
ASP.NET - Phần 8 - Làm việc với HttpResponse
ASP.NET - Phần 7 - Làm việc với HttpRequest
มุมมอง 7093 หลายเดือนก่อน
ASP.NET - Phần 7 - Làm việc với HttpRequest
ASP.NET - Phần 5 - Bài tập: Viết chương trình To Do List
มุมมอง 1.6K4 หลายเดือนก่อน
ASP.NET - Phần 5 - Bài tập: Viết chương trình To Do List
ASP.NET - Phần 3 - Các Attribute thường dùng
มุมมอง 1.3K4 หลายเดือนก่อน
ASP.NET - Phần 3 - Các Attribute thường dùng
ASP.NET - Phần 2 - Controller và action method
มุมมอง 1.9K4 หลายเดือนก่อน
ASP.NET - Phần 2 - Controller và action method
ASP.NET - Phần 1 - Giới thiệu về ASP.NET và viết chương trình đầu tiên
มุมมอง 3.8K4 หลายเดือนก่อน
ASP.NET - Phần 1 - Giới thiệu về ASP.NET và viết chương trình đầu tiên
nShop - Day 1 - Giới thiệu khái quát về dự án và những bước đầu tiên cần làm
มุมมอง 2.9K4 หลายเดือนก่อน
nShop - Day 1 - Giới thiệu khái quát về dự án và những bước đầu tiên cần làm
em mới học c,c++ , html và css thì học .net này được luôn ko ạ anh ?
Chỉ có thử mới biết được 😌
hi anh, khi semaphore.Release(MAX); được 1 lúc sẽ bị lỗi "Adding the specified count to the semaphore would cause it to exceed its maximum count". Ở đây em sử dụng đoạn bên dưới thì sẽ hết, cái này là do Trong ReplaceBox(), việc gọi Release(MAX) sẽ cố gắng tăng count lên MAX permits một lúc đúng không anh ? for (int i = 0; i < MAX; i++) { semaphore.Release(); }
Em lấy bao nhiêu thì trả tối đa bấy nhiêu thôi chứ em trả quá thì nó bị lỗi đó
like trước khi xem ❤❤❤
Anh cho em hỏi là tại sao biến local bình thường phải tự gán giá trị trước khi sử dụng còn, các biến thành viên (field data) trong 1 object thì tự động được gán giá trị mặc định tùy thuộc từng kiểu dữ liệu khi object được khởi tạo ạ? em đọc giải thích ở 1 số chỗ khác rồi nhưng vẫn mông lung, muốn hỏi anh cho chắc chắn ạ 😁
A chưa hiểu câu hỏi lắm, e có ví dụ cụ thể không?
@@hoc-lap-trinh Dạ, Ví dụ: class Animal { public int Age { get; set; } } public static void Main(string[] args){ int localVariable; // không gán giá trị Console.WriteLine(localVariable); // Visual studio sẽ đưa ra cảnh báo: Use of unassigned local variable 'a' Animal dog = new Animal(); Console.WriteLine(dog.Age); // Age sẽ được tự động gán trị 0 } em muốn hiểu bản chất của 1 biến local và biến thành viên của 1 object tại sao lại như vậy đó ạ.
à vì khi gọi new thì vùng nhớ được cấp phát sẽ được reset nên các biến thành phần kia nó mang giá trị mặc nhiên, còm khi em dùng các giá trị trên stack, ví dụ khi sử dụng biến local hoặc dùng stackalloc thì vùng nhớ không được reset, vậy nên nó bắt buộc em phải gán giá trị rồi mới được dùng (vì nếu không giá trị của nó sẽ là ngẫu nhiên)
@@hoc-lap-trinh Dạ em cảm ơn 😍Cứ phải hỏi anh để anh truyền tải cho kiến thức chuẩn chứ không dám tin ở các nguồn khác hehe 👀
@@maihieu9425 😅mất niềm tin vào cuộc sống thế?
yêu ơi là yêu 🤩
😅
Dạ anh ơi cho em hỏi, các biến cục bộ trong 1 function thì chỉ được sử dụng khi mà function được gọi đến, các biến này cũng được dọn dẹp đi khi function thực thi xong, thì nó được cấp phát tĩnh hay cấp phát động ạ?
Ta vẫn gọi nó là cấp phát tĩnh em nhé, khác với cấp phát động là em xin cấp khi cần và có thể giải phóng khi dùng xong, các biến trong function nó luôn tồn tại khi em chạy vào trong function đó, em không phải làm thao tác cấp phát hay giải phóng.
2/1/2025 năm mới, bắt đầu khóa học mới <3
Em dám chắc cả việt nam chưa ai làm video về cái này. Cảm ơn anh rất nhiều <3
Hi hi cảm ơn em
Anh nam cho em hỏi là tại sao đã dùng RSA để encrypt mà lại còn dùng SHA-256 để hash nữa vậy anh? Em cảm ơn ạ.
Anh hỏi trên FB rồi, chờ câu trả lời nhé 😁 facebook.com/share/18iE7kqSje/?mibextid=wwXIfr
@hoc-lap-trinh vâng anh chúc anh nam đoán tết vui vẻ
@@hoc-lap-trinh cảm ơn anh nam đã giải đáp thắc mắc <:3
@@viencong có bài trả lời rồi nhé :)
Cảm ơn thầy
Càng ngày càng hay anh ơi
trước học k hiểu, sau làm project r h quay lại xem lại mới thấm a ạ
Học đi đôi với hành là vậy
@hoc-lap-trinh trước e theo học khoá này mà ko thấm dc á a, thấy kiến thức hơi khó, h làm project mới thấy những kiến thức này đã dc a dạy, nên vừa làm vừa quay lại học h mới thấm dần
Trời a thấy nó dễ ợt mà, khó chỗ nào đâu nhỉ 😁
@@hoc-lap-trinh chắc tại e ít thực hành á a, nên khó ngấm, h làm project mới ngấm nè a
thanks anh Nam nhiều, vids nào cũng chi tiết và bổ ích hết. Không biết vấn đề do laptop em hay sao, clip nào em cũng chỉnh 100% volume mới nghe được, mà nó cũng nhỏ lắm ạ :(
Lạ nhỉ lúc nào a cũng kiểm tra lại, kể c as r từ TH-cam. Để a xem lại xem sao.
được quá anh ơi , nhưng mà mong những video tới mic anh to hơn ạ
Ok em
nay em có đọc 1 bài viết trên nhóm ASP,NET Core VN có 1 bạn vừa đi phỏng vấn intern về, bạn bảo leader họ cho live coding 1 web: cho user upload file pdf sao kê, tìm kiếm thông tin sao kê. 😥 em thấy hơi khó, anh nghĩ sao ạ
A thấy dùng đề bài này để test intern thì hoặc là người ra đề /phỏng vấn không có kinh nghiệm, hoặc là công ty đó đủ người rồi :D. Đề bài để phỏng vấn hoặc test nó phải cho thấy được người làm là người như thế nào, trình độ ra sao chứ không phải một dạng đánh đố về một thứ thật cụ thể. Anh đi phỏng vấn ở công ty này chắc cũng rớt thôi nên không sao cả, ta tìm chỗ khác phù hợp hơn :).
check-in Giới thiệu các khái niệm trong Authentication và Authorization của anh Nam
Em đang nghiên cứu thêm về oidc, thì em có tìm hiểu về google account, em có thấy trong file discovery của google accounts.google.com/.well-known/openid-configuration việc authorization_endpoint và token_endpoint ở hai server khác nhau, em nghĩ có lẽ họ có hai service một phục vụ cho việc authen, một để cấp phát token, anh có thể làm video hướng dẫn về việc tách riêng 2 server dạng như vậy được không ạ? Em cảm ơn anh!!!
Tách ra thì viết hai cái riêng thôi mà, hoặc thậm chí là cùng 1 cái, nếu hai cái riêng thì chia sẻ backend DB với nhau là được.
@hoc-lap-trinh dạ, em cảm ơn anh ạ, em chúc anh thật nhiều sức khỏe ạ! Để tụi em còn có nhiều video asp .net để học và đặc biệt là mini webserver nữa ạ 🤩🤩🤩
Em cảm ơn anh vì bài giảng thật sự tâm huyết, những người làm nội dung mới thấy được để làm bài giảng cả tiếng đồng hồ mà đầy đủ kiến thức và sâu sắc như vậy thật không dễ dàng chút nào.
Hi hi cảm ơn em nhiều
Cảm ơn a
phần lý thuyết anh nói hay thật sự anh ạ. 100 điểm <3
🥰🥰🥰
quá đã luôn, 3 ngày ra 3 clip, cảm ơn anh
Hi hi đang kỳ nghỉ mà 😁
Cảm ơn a
❤️❤️❤️
cám ơn thầy
Anh được rùi, gọi thầy ngại quá 😂
Đây rồi đợi mãi ❤
❤️❤️🥰
siêu phẩm đây rùi <3
😂
Bài giảng hay nha a :D
Cảm ơn em
trong thực tế nên đặt tên policy thế nào để nó dễ hiểu và dễ maintain vậy a
Tên policy nên thể hiện mục đích, ví dụ như “management” hay “1year-membership”…
bài trước e ngẫm r vọc vạch 1,2 ngày mới vỡ ra qua bài này xem 1 lần là hiểu luôn 😅 đúng là cứ phải hiểu bản chất thì học mấy cái sau mới dễ dàng dc
Đúng rồi, một khi đã hiểu thì học sẽ thấy rất đơn giản.
E nghĩ các ví dụ OOP này nếu a dùng phần code của Java thì nó sẽ trực quan và dễ hiểu bơn ạ😁
Biết đâu phiên bản mới lại làm bằng Java thì sao? :D
cảm ơn ad , seri thật bổ ích ạ
cảm ơn bạn
đã hoàn thành 4/n 🙌
Cố lên được 1/10 khoá học rồi 😂
Net 8 và net 9 khác nhau k a Nam
Phần này thì y chang nhau thôi em ạ
39:55 dạ a cho e hỏi khi redirect đến User mà chưa login thì nó sẽ phải qua bước OpenIDConnect để xác thực rồi mới tới bước Authorization phải ko ạ
người dùng sẽ thực hiện xác thực trên trang Facebook, trang Duolingo sẽ không biết gì về việc này, nó chỉ cần quan tâm là có trả về cho nó code hay token hay không thôi
Hay quá , vô tình lướt trên face và mình đang học về c# luôn , mong có thể code được Backend sau series này
nếu nắm hết thì sẽ làm được thôi em
Nếu được thì em nên liếc qua khóa .NET cơ bản để xem có phần nào trong đó mình chưa nắm không, vì khóa này có nhiều kiến thức dựa trên khóa .NET cơ bản.
@@hoc-lap-trinh ok anh , cảm ơn a
Tiếp ra series này nhé thầy ơi!
Hên xui :))
video hay nha a ơi, thanks
Thanks em
hay quá anh ơi, trông từng ngày, hôm nay là ngày thứ 6 rồi😁🥰
😅 nay bận rùi, mai ra bài tiếp
quá thấm học xong hết kiến thức kiến thức gần bằng junior ấy chứ
Học hết thì quá luôn í chứ gần bằng gì :))
Hi anh Nam cho em hỏi cái nha 🙋♂ Với cấu trúc hiện tại thì mối liên hệ giữ Usecase - Entities và Cotroller - Model khá tương đồng nên em muốn hỏi xem ý nghĩa của việc phân chia dự án ạ 🤔 Cảm ơn anh Nam nhiều 🙌
Thực ra UseCase/Entity và Controller/Model không hoàn toàn giống nhau. UseCase/Entity chỉ đến các thành phần đứng từ góc độ business, tức Entity đại diện cho các thành phần xuất hiện trong bài toán em cần giải quyết, ví dụ như trong 1 app ngân hàng thì Entity có thể là Account, một usecase có thể là Withdraw hay Transfer, tức là một vấn đề mà bài toán của chúng ta giải quyết. Trong khi đó một model đại diện cho một "khối dữ liệu" mà chúng ta sẽ phải xử lý, đôi khi nó trùng với entity nhưng nhiều trường hợp không giống, ví dụ như khi em làm trang chuyển khoản thì model của em sẽ bao gồm 2 account number của người nhận và người gửi (một người có thể có nhiều account nên ta vẫn phải chỉ ra gửi từ account nào), model này chỉ để dùng phục vụ cho chức năng chuyển khoản chứ không đại diện cho một entity trong hệ thống. Tương tự khi chuyển khoản xong thì em có thể có model "TransferResult" để hiển thị trên result view, nhưng model này lại không tương ứng với bất kỳ entity nào cả.
@@hoc-lap-trinh Dạ cảm ơn anh Nam đã trả lời nha 👏 Cho em hỏi thêm một chút, là lúc em debug hàm Add() thì em thấy nó có chạy qua cả Entities và cả Model, vậy trong trường hợp mình liên kết với DB vào chương trình, thì mình sẽ gắn DB ở Model đúng không ạ. 🤔 Mình vẫn giữ Entities sẽ lớp nắm business rules chứ không tương tác với vòng layer ngoài cùng trong vòng trong clean architecture 🔍
@@biradon4444 DB sẽ không nằm trong Entities hay Models, mà nó sẽ nằm trong Infrastructure
Không biết em có làm sai bước nào không mà xử lý cái jwt này mệt quá - Để khắc phục token bị hacker cướp => cho token thời gian ngắn - Token có thời gian ngắn => user phải đăng nhập lại nhiều => Thêm refresh token - Khắc phục refresh token bị cướp => Thêm blacklist cho refresh token để invalidate nó - Mỗi khi invalidate 1 refresh token thì phải invalidate access token nó sinh ra - Mỗi lần request phải vào db check token hợp lệ
Em có dùng token rotation không? Sao phải xử lý tùm lum khổ vậy? A thấy rất nhiều người sử dụng black list các kiểu rồi nhưng a nghĩ nó vô dụng mà chỉ tốn thêm chi phí xử lý, bởi vẫn cần 1 khoảng thời gian để xác định token bị hack và đưa vào black list, liệu thời gian đó có nhanh hơn vòng đời của 1 access token? Và nếu implement để đưa refresh token vào black list thì sao không xóa nó luôn? Việc dùng black list sẽ phải trả giá bằng việc thêm một request đến black list đó trên mỗi lần xử lý.
@@hoc-lap-trinh - Em có dùng token rotation, mà em sợ lúc trả token về bị hacker đọc được, nên lưu thêm black list nữa - Nếu xoá mỗi refresh token đi thì hacker vẫn truy cập được trong khoảng thời gian access token còn hạn, và tính năng force logout nữa, nên em nghĩ phải blacklist cả refresh token và access token được sinh ra cùng với nó nữa - Với lại nếu dùng token rotation thì dùng đa thiết bị kiểu gì vậy ạ. Em random 1 chuỗi base64, lưu vào trình duyệt để xác định, nhưng bị sai ở chỗ người dùng sử dụng trình duyệt khác cũng bị thông báo "Tài khoản được đăng nhập ở thiết bị khác"
@@hoc-lap-trinh Em có dùng kỹ thuật rotation ạ - Nhưng khi muốn bắt buộc người dùng logout ngay lập tức thì em phải tạo blacklist cho RefreshToken và AccessToken được tạo bởi RT đấy. Thành ra query nào cũng phải check db - Em check token có bị đánh cắp không bằng cách: gửi AT và RT lên, nếu chữ ký AT đúng, nhưng RT khác với RT mới nhất thì bị cho là đánh cắp => nhưng làm thế này em lại không biết cách làm đa thiết bị
video thiết thực nhất từng xem trên ytb