Lập trình viên sớm muộn gì bạn cũng phải biết về cơ chế đăng nhập SSO (Single SignOn) - Phần 3

Nội dung bài viết

Video học lập trình mỗi ngày

Tên tiếng Anh đầy đủ của SSO là Single SignOn, hay còn gọi là cơ chế đăng nhập một lần nhưng có thể sử dụng khắp mọi nơi. SSO có trong nhiều hệ thống ứng dụng. Người dùng chỉ cần đăng nhập một lần để truy cập vào tất cả các hệ thống ứng dụng đáng tin cậy lẫn nhau. Nó bao gồm một cơ chế có thể ánh xạ thông tin đăng nhập chính này với các ứng dụng khác để đăng nhập cùng một người dùng. 

Nó là một trong những giải pháp phổ biến nhất được sử dụng rộng rãi hiện nay. Và nếu bạn là một lập trình viên thì bạn cần nên hiểu nó. Và quan trọng nhất cho các bạn làm back-end thì phải tìm hiểu về "4 cơ chế đăng nhập cần biết là đủ?"


SSO là gì?


SSO là viết tắt của Single Sign On, có nghĩa là bạn có thể đăng nhập vào một hệ thống trong một nhóm ứng dụng đa hệ thống (google, youtube, console...) và bạn có thể nhận ủy quyền trong tất cả các hệ thống khác mà không cần đăng nhập lại. SSO thường yêu cầu một trung tâm xác thực độc lập như (passport..). Giống như đi máy bay vậy tất cả thông tin đăng nhập vào hệ thống con phải thông qua hộ chiếu. Bản thân hệ thống con sẽ không tham gia vào hoạt động đăng nhập. Sau khi hệ thống đăng nhập thành công, hộ chiếu sẽ cấp Token (mã thông báo) cho mỗi hệ thống con. Các hệ thống con có thể giữ các Token để có được các tài nguyên được bảo vệ của riêng chúng. 


Theo tips javascript thì có một bài viết về "Cơ chế đăng nhập với SSO" được giải thích khá rõ trên website "auth0.com". Có lẽ dù cố gắng như thế nào cũng khó mà viết hay hơn được nữa. Vì thế chúng ta có thể đọc bài viết này thông qua bài dich trên "techmaster.com"


Nhưng trước hết, tôi muốn nói rõ hơn về mô hình này. 


Nếu bạn là lập trình viên mà có con rồi thì dễ hiểu hơn. Nôm na là mỗi buổi tối thứ 7 tôi thường cho baby của tôi đi chơi ở công viên kid. Trong đó có rất nhiều trò chơi như, xe điện, máy bay điện, phòng xếp hình, đu quay... Ở đây có hai sự lựa chọn đó là mua vé mỗi trò chơi, hoặc mua 1 vé cho tất cả các trờ chơi. ĐÚng vậy SSO ở đây có nghĩa là chỉ cần mua một vé tổng thì có thể chơi tất cả các trò chơi mà không cần phải đến tận gian hàng mà mua từng vé. Đó là một ví dụ cụ thể nhất để nói về SSO - Co chế đăng nhập.


Lợi ích của việc sử dụng SSO


Như những phần trước chúng ta đã nói về ưu điểm và nhược điểm của việc sử dụng cookie, session - phần 1, hay sử dụng cơ chế login sử dụng token ở phẩn 2, thì chúng ta cũng nên nói qua những nhược và ưu của việc sử dụng cơ chế login SSO.

  • Rất tiện lợi cho người dùng khi đăng nhập một lần và sử dụng nhiều lần khi sử dụng hệ thống ứng dụng. Người dùng không còn cần nhập tên người dùng và mật khẩu người dùng mỗi lần, cũng như không cần phải nhớ nhiều bộ tên người dùng và mật khẩu người dùng. Nền tảng đăng nhập một lần có thể cải thiện trải nghiệm người dùng khi sử dụng hệ thống ứng dụng. 
  • Thuận tiện cho người quản trị Người quản trị hệ thống chỉ cần duy trì một tập hợp các tài khoản người dùng thống nhất, rất tiện lợi và đơn giản. Ngược lại, quản trị viên hệ thống trước đây cần quản lý nhiều nhóm tài khoản người dùng. Mọi hệ thống ứng dụng đều có một tập hợp các tài khoản người dùng, điều này không chỉ mang lại sự bất tiện cho việc quản lý mà còn dễ xảy ra những sơ hở trong quản lý. 
  • Phát triển hệ thống ứng dụng được đơn giản hóa Khi phát triển một hệ thống ứng dụng mới, bạn có thể sử dụng trực tiếp dịch vụ xác thực người dùng của nền tảng đăng nhập một lần để đơn giản hóa quá trình phát triển. Nền tảng đăng nhập một lần thực hiện đăng nhập một lần bằng cách cung cấp nền tảng xác thực thống nhất. Do đó, hệ thống ứng dụng không cần phát triển các thủ tục xác thực người dùng. 


Còn sau đây hay đọc bài viết của "Sebastian Peyrott". Nếu bạn có một hay nhiều câu hỏi gì thì hãy bình luận phía dưới nhé. Bài viết được dịch từ: auth0.com 


Xác thực Single Sign On (SSO) ngày càng trở nên cần thiết hơn bao giờ hết. Ngày nay, hầu hết các trang web đều yêu cầu xác thực để truy cập tới các tính năng và nội dung của nó. Với số lượng các trang web và dịch vụ đang tăng lên, một hệ thống đăng nhập tập trung (centralized login system) trở nên cần thiết.


Các thuật ngữ liên quan đến SSO


Khái niệm xác thực tập trung hay liên kết danh tính điện tử được biết đến như là federated identity (liên kết danh tính). Các hệ thống federated identity xử lý các vấn đề: 

  • Xác thực (authentication) 
  • Phân quyền (authorization) 
  • Trao đổi thông tin người dùng 
  • Quản lý người dùng


Xác thực Single Sign On (SSO)


Sớm hay muộn thì các team phát triển web cũng sẽ phải đối mặt với một vấn đề: bạn đã phát triển một ứng dụng tại domain X và bây giờ bạn muốn phát triển một ứng dụng mới tại domain Y sử dụng các thông tin đăng nhập giống với domain X. Trong thực tế, bạn muốn nhiều hơn thế: nếu người dùng đã đăng nhập vào domain X họ cũng sẽ tự động đăng nhập vào domain Y. Đây là cái SSO giải quyết. 



Giải pháp cho kịch bản ở trên là chia sẻ thông tin session giữa các domain. Tuy nhiên, vì lý do bảo mật, trình duyệt buộc phải tuân theo chính sách same origin policy. Nội dung của chính sách này là chỉ những người tạo ra mới có quyền truy cập các cookie (hay bất kỳ dữ liệu lưu trữ cục bộ nào). Nói cách khác, domain X không thể truy cập các cookie từ domain Y và ngược lại. Đây chính là vấn đề mà SSO giải quyết: chia sẻ thông tin session trên nhiều domain khác nhau. 



Các giao thức SSO chia sẻ thông tin session theo nhiều cách khác nhau, nhưng những thứ cơ bản thì giống nhau đó là: có một central domain (domain trung tâm) để thực hiện xác thực (authentication) và sau đó session được chia sẻ với các domain khác theo nhiều cách. Ví dụ, center domain có thể tạo một JSON Web Token đã được ký (được mã hóa sử dụng JWE). Token này có thể được truyền tới client và được sử dụng để xác thực người dùng cho domain hiện tại cũng như bất kỳ domain nào khác. Token có thể truyền tới domain gốc bằng cách điều hướng và chứa tất cả các thông tin cần thiết để xác minh người dùng cho domain đang yêu cầu xác thực. Khi token đã được ký, thì nó không thể bị chỉnh sửa bởi bất kỳ client nào. 


Tips: 👉 Cơ chế đăng nhập với token hơn cookie và session như thế nào? 


Bất cứ khi nào người dùng tới một domain yêu cầu phải xác thực, anh ta hay cô ta sẽ được chuyển đến domain xác thực (authentication domain). Nếu người dùng đã đăng nhập tại domain xác thực, anh ta hay cô ta sẽ ngay lập tức được chuyển hướng trở lại domain gốc với token để xác thực các request tiếp theo. 



Các giao thức khác nhau


Nếu bạn đã đọc về SSO online, chắc chắn bạn sẽ biết rằng có rất nhiều cách để triển khai SSO như: OpenID Connect, Facebook Connect. SAML, Microsoft Account (trước kia là Passport),… Lời khuyên của chúng tôi là chọn bất kỳ cái nào mà bạn cảm thấy đơn giản và dễ dàng nhất để thực hiện. 


Ví dụ, SAML tập trung sâu vào các doanh nghiệp, vì thế trong một số trường hợp nó là lựa chọn hợp lý nhất. Nếu bạn cần kết hợp nhiều hơn một giải pháp, đừng lo lắng: có nhiều framewok cho phép kết hợp nhiều giải pháp SSO khác nhau. Một trong số các framework đó là AuthO.


Kết luận


Các hệ thống phân tán (decentralized system) ngày càng trở lên phổ biến và xác thực là một khía cạnh quan trọng của tất cả chúng. SSO giải quyết một vấn đề lớn: làm thế nào để quản được số lượng người dùng đang tăng lên trên toàn bộ hệ thống gồm nhiều ứng dụng và dịch vụ. 


Các framework chẳng hạn như OpenID Connect và các dịch vụ chẳng hạn như Auth0 làm cho việc tích hợp Single Sign On vào các ứng dụng mới hoặc đã có của bạn trở nên dễ dàng hơn nhiều. Nếu bạn đang triển khai xác thực trên một ứng dụng hay dịch vụ mới hãy xem xét tích hợp SSO.

Có thể bạn đã bị missing