AUTHENTICATION STORY PART 1: AUTHENTICATION LÀ LÀM GÌ?

     

Series này chứa đựng nội dung hết sức dài mẫu và những cân nhắc hết sức rối rắm của một lập trình sẵn viên giao tiếp kém. Mong quí vị và các bạn hết sức cảnh giác và không nguy hiểm khi đọc.

Bạn đang xem: Authentication story part 1: authentication là làm gì?

First things first

Mình vừa mới đây ngoài câu hỏi viết code ra thì còn được sếp ưu tiên cho đi phỏng vấn các ứng viên. Khổ một nỗi là bản thân thì hơi non kinh nghiệm tay nghề nên thường chẳng biết hỏi fan ta câu gì. Chũm rồi vào một lần chất vấn ngẫu hứng, mình mới hỏi bạn đối diện:

Bạn làm cách nào để đăng nhập người dùng vào hệ thống?Ơ... Thì em đến user nhập username, password rồi singin thôi ạ.Không bạn thích bạn mô tả lại quá trình ấy cụ thể hơn cơ.Thì user đã nhập username, password, khối hệ thống sẽ kiểm tra với db, nếu như đúng thì đăng nhập, còn không thì đang báo lỗi.Ừ tuy nhiên làm bí quyết nào để khối hệ thống biết là người đó đã đăng nhập?...

Và ráng là buổi chất vấn dừng rất nhanh sau đó, vị mình nhận thấy là ứng viên của bản thân dù đã đi làm việc backend mấy năm mà lại lại ko thể biểu thị lại một quá trình rất là basic của xây dựng web, cho dù chỉ là một cách thức nào kia quen thuộc.

Sau khi phân biệt sự thật ngỡ ngàng ấy, mình thường xuyên hỏi những chúng ta ứng viên sau cũng chính với câu hỏi này, mặc dù nhiên không có lần nào nhận được câu trả lời chạm tới tí xíu làm sao của vấn đề. Sau đó là một số câu trả lời:

Em cần sử dụng passport nhằm đăng nhập người dùng.Thế các bạn có đọc passport vận động thế như thế nào không?...

Bạn khác

Em tạo 1 loại form bao gồm username/password rồi submit. Hệ thống sẽ check và trả về hiệu quả đã đăng nhập.Ừ thế tiếp đến tại sao website lại biết ai đang đăng nhập?Chắc nó có lưu đâu đó....

Một bạn khác:

Em không nhớ rõ lắm, do cái đó framework nó cung cấp hết rồi.Ừ nhưng bạn cũng bắt buộc hiểu nó chuyển động như cố nào chứ?À chiếc đó thì em chưa để ý lắm.

Sau đợt phỏng vấn ấy, mình đưa ra quyết định sẽ viết cái gì đấy này để đánh giá lại hiểu biết của chính bản thân mình cũng như tránh việc nhiều người quên mất điều căn bản này lúc đi chất vấn hay vào công việc.

Để có thể phác họa cho chúng ta một bức ảnh đầy đủ, toàn cảnh về những kỹ năng liên quan lại tới authentication, mình đã chia bài viết ra làm những phần để các bạn đọc đỡ chán:

Phần 1: Authentication là có tác dụng gì?Phần 2: Authentication cơ bảnPhần 3: những phương thức bảo đảm hay dùngPhần 4: Best practices

Series hoàn toàn có thể có phần 5, phần 6 nếu mình suy nghĩ ra cái gì đấy để nói thêm =))

Đối tượng và giới hạn kiến thức

Trong phần 1 này, bản thân sẽ nói đến bản chất của quá trình xác thực bạn dùng với những ứng dụng web. Và vị series này dành cho những người làm việc với Web API, Web service, bắt buộc sẽ phù hợp với các đối tượng người sử dụng như web developer, mobile developer.

Thứ 2, chúng ta cần có nền tảng kiến thức về website cơ bản, đọc được định nghĩa HTTP request (định nghĩa, cấu trúc, cú pháp). Đây là điều cốt yếu ớt để chúng ta hiểu được thực chất của vấn đề, kị bị đông đảo khái niệm rối rắm la liệt như OAuth, Token-based, Passwordless,... Khiến cho quay cuồng.

Nếu chúng ta chưa trang bị cho khách hàng những kiến thức trên, mình đề nghị bạn yêu cầu đọc trước khi liên tục với bài viết này. Còn nếu đang có, thì hãy tiếp tục xả thân vào cuộc phiêu lưu tưởng chừng dễ dàng mà vô cùng băn khoăn này.

Authentication là gì?

Thể theo quan niệm của wikipedia, một website rất danh tiếng và cũng chả buộc phải lời ghi chú dài cái thừa thãi này:

Xác thực (authentication) là một hành vi nhằm thiết lập hoặc chứng thực một cái gì đó (hoặc một bạn nào đó) đáng tin cậy, tất cả nghĩa là, rất nhiều lời khai báo do fan đó giới thiệu hoặc về thiết bị đó là sự thật.

Quả là 1 định nghĩa không những rộng lớn mà còn mang ý nghĩa bao quát các mặt của vấn đề. Một gớm nghiệm rất cao khi các bạn tiếp cận quan niệm nào đó đó là đưa nó về một ngữ cảnh chũm thể. Loại định nghĩa authentication cơ mà wikipedia chỉ dẫn nó bao hàm không ít thứ, cùng khi áp dụng vào mỗi hoàn cảnh rõ ràng nó lại có một ý nghĩa khác nhau.

Ví dụ thuộc là authentication trong ứng dụng web thì nó rất có thể xuất hiện nay ở các lớp nghĩa không giống nhau:

VD1: việc server xác xắn yêu cầu do chính xác là từ client của người dùng gửi lên hay không cũng là authentication.VD2: việc server xác xắn nội dung yêu cầu bởi vì đúng từ người dùng A gửi lên hay là không cũng là authentication.

Với 2 lớp nghĩa này, các bạn cũng có thể tưởng tượng như sống VD1 là tuyệt đối cái phong bì, chất vấn tem thư, địa chỉ gửi xem có đúng là từ thôn cành lá xã cây cỏ huyện trời mây gửi mang lại hay không, rồi thì phong bì gồm bị bóc tách hay chưa, còn niêm phong không. Còn VD2 là đảm bảo nội dung thư, kiểm tra chữ ký kết xem có đúng là của anh hơi từ trại không,...

Tuy nhiên, câu hỏi kiểm tra cái phong bì thường xuyên là câu hỏi của một thành phần dev khác, tương quan tới hệ thống nhiều hơn, thế nên mình sẽ không đề cập những tới trong nội dung bài viết này. Các bạn chỉ yêu cầu hiểu được nó là quá trình gì thôi là được. Từ phía trên về sau thời điểm mình nhắc đến authentication tức là sẽ nhắc đến việc xác thực bạn dùng ở cung cấp ứng dụng, hay chính là cái thư được gởi từ ai nhé.

Bản chất của authentication?

Vậy thì chúng ta làm sao hiểu rằng thư này được gửi tới từ anh tương đối mà chưa phải từ một thằng ất ơ như thế nào mạo danh? chúng ta cũng gần như biết Website, web service được làm cho từ những HTTP request.

Xem thêm: Ốp Lưng Huawei Mate 20 Pro, Bao Da, Ốp Lưng, Dán Cường Lực Chính Hãng

Ví dụ bạn vào website facebook.com. Đầu tiên trình duyệt gọi 1 HTTP request cho tới facebook.com để lấy nội dung HTML. Sau đó lại gọi các HTTP request tới lấy nội dung JS, css, ảnh,... Rồi lại gọi những HTTP request để mang danh sách các bạn bè, bài đăng,... Có tất cả những tin tức này, trình duyệt mới hiển thị cho chính mình được trang facebook với rất nhiều nội dung và hệ trọng như thế.

Tuy nhiên, về cơ bản thì HTTP request là một stateless protocol (HTTP2 tất cả stateful component nhưng cơ phiên bản HTTP vẫn luôn là stateless). Stateless tức thị sao? tức là server xử lý những request một cách độc lập, không phụ thuộc vào vào tâm lý hay hiệu quả của request trước.

Stateless/stateful là tính chất mang tính tương đối. Dưới góc nhìn protocol thì HTTP là stateless, tuy vậy dưới góc độ application thì ta đang vắt làm nó biến hóa stateful.

Cái này cũng tương tự 2 bạn thư từ với nhau, từng lá thư là độc lập. Lá thư đầu tiên gửi từ địa chỉ cửa hàng A mình tin là của anh ấy Khá, tuy vậy lá thư thứ hai cũng từ showroom A gửi tặng thì mình chưa chắc hẳn đã tin với lại phải chứng thực lại.

*

Vì thế bản chất của authentication sinh sống đây đó là việc bạn xác thực HTTP request được gởi từ một bạn nào đó.

*

Authentication được thực hiện như thế nào?

Các các bạn đã hiểu thực chất của authentication rồi, vậy thì nó sẽ được thực hiện như thế nào?

Đối với cùng 1 bức thư, cách để bạn biết thư được gửi đúng từ 1 người nào sẽ là chữ ký, nét chữ,... Hay bất kể một dấu hiệu nào đó được thống nhất trường đoản cú trước giữa 2 người.

Quay trở về với một HTTP request. Thực chất của HTTP request cũng chính là một phiên bản tin trình diễn bằng text. Do đó cũng sẽ cần một dấu hiệu nào đó được thống nhất để ứng dụng của họ nhận ra nó xuất phát từ người tiêu dùng nào.

Một lốt hiệu nhận ra người dùng hoàn toàn có thể là ngẫu nhiên thứ gì mang tính đặc trưng, như tên đăng nhập, mật khẩu, một chuôĩ chứa thông tin được mã hóa, hay thậm chí là là một chuỗi cam kết tự random.Dấu hiệu nhận ra người dùng rất có thể ở ngẫu nhiên vị trí nào rất có thể trong bạn dạng tin HTTP như: URL, Header (Cookie header, Authorization header, Custom header), Body (Form field,...)

*

Minh họa áp dụng 1 trong các vị trí trên.

Quá trình authentication

Để có được dấu hiệu dìm dạng phía trên, ta cần phải có sự thống nhất trước giữa người dùng và ứng dụng để áp dụng của bạn cũng có thể nhận dạng được người dùng. Một quy trình authentication sẽ bao hàm 3 phần:

Sinh ra lốt hiệu: Đây là việc họ quyết định coi dùng tín hiệu gì, tạo nên dấu hiệu đó như thế nào. Một quy trình authentication rất có thể có sự xuất hiện của rất nhiều dấu hiệu, ví dụ như username/password, user token, api key,... Các dấu hiệu này sẽ sở hữu cách có mặt khác nhau, quy ước sử dụng khác nhau.Lưu trữ vệt hiệu: Đây là việc ứng dụng sẽ quyết định lưu trữ dấu hiệu này sinh hoạt đâu, ở cả server và client, thông qua vị trí nào trên phiên bản tin HTTP,...Kiểm tra lốt hiệu: Đây là việc vận dụng của chúng ta kiểm tra lại tính hợp lệ của lốt hiệu, so sánh xem dấu hiệu này là của người tiêu dùng nào,...

*

Phía trên hình ảnh là ví dụ quá trình authentication, trong số đó mỗi request tùy ở trong vào tin tức đầu vào sẽ tiến hành xử lý qua một hoặc phần nhiều của quá trình authentication.

Tổng kết

Trên đây đó là những có mang cơ bạn dạng nhất về authentication. Cho mặc dù là bạn sử dụng Basic Authentication, Single Sign-on, OAuth 2.0, Social Sign-in,... Hay là cách tiến hành nào đi chăng nữa thì bình thường quy lại cũng đông đảo là thao tác sau:

Xác thực một HTTP request bởi một tín hiệu nào đó.

Còn việc xuất hiện ra những phương thức xác thực phía trên nó chỉ với ở 3 việc:

Tạo ra tín hiệu gìLưu trữ dấu hiệu ở đâuKiểm tra dấu hiệu thế nào

Nắm lấy điểm cơ bạn dạng này, bản thân tin các các bạn sẽ tiếp cận với tất cả các vẻ ngoài authentication dưới một chiếc nhìn khác có tính khối hệ thống hơn.

Xem thêm: Hướng Dẫn Thủ Tục Đăng Ký 3G Sim Học Sinh Viên 2022, Cách Đăng Ký Sim Học Sinh Mạng Viettel

Hẹn gặp gỡ lại các bạn trong Phần 2: Authentication cơ bản, nơi mình vẫn nói kỹ hơn về những phương thức xác thực người tiêu dùng cơ bản.