Single Sign-On (SSO) là gì, hoạt động ra sao?

Ngày nay, hầy hết các trang web đều yêu cầu xác thực người dùng thì mới có thể truy cập vào chức năng và nội dung của họ. Với sự gia tăng của số lượng các trang web, thì đương nhiên, số lượng tài khoản mà mỗi người dùng cần có sẽ tăng theo.Thử tưởng tượng bạn đang sử dụng 10 dịch vụ khác nhau, mà mỗi tài khoản để truy cập các dịch vụ này thì đều yêu cầu tối thiểu 2 thông tin cơ bản là user name và password. Chà, việc ghi nhớ hết chỗ này cũng mệt lắm đây! Vậy thì thông minh hơn một chút, là sẽ sử dụng user name và password của các dịch vụ này là y hệt nhau 😄 Cơ mà với 10 dịch vụ, thì việc đăng nhập 10 lần là không thể tránh khỏi !!! Và vì thế, single sign-on ra đời

Single Sign-On, đúng như tên gọi, là cơ chế cho phép người dùng có thể truy cập nhiều trang web, ứng dụng mà chỉ cần đăng nhập một lần. Một khi đã được định danh ở một trang website A, thì cũng sẽ được định danh tương tự ở website B mà không cần lặp lại thao tác đăng nhập

Một vài lợi ích có thể kể đến của single sign-on là:

Tuy nhiên, một vài hạn chế không thể không kể đến:

Hệ thống nhận dạng liên kết( Federated Identity Glossary) là nơi tập trung và liên kết thông tin người dùng. Có 4 yếu tố nền tảng cấu thành nên hệ thống này:

Xác thực có nghĩa là: kiểm tra thông tin đăng nhập và tiến hàng định danh người dùng.

Phân quyền dựa trên thông tin định danh để kiểm tra quyền truy cập của user.

Trao đổi thông tin người dùng Mỗi hệ thống con sẽ cần và lưu trữ các thông tin khác nhau của người dùng, tuy nhiên sẽ có các thông tin bị lặp lại, ví dụ như tên, họ…. Do đó, cần có một nơi để tổng hợp lại các thông tin này, và trao đổi cho các hệ thống con.

Quản lí người dùng admin có thể quản lí người dùng bằng các thao tác thêm, sửa, xóa… ở các hệ thống con.

Single sign-on là một phần của hệ thống nhận dạng liên kết, có liên quan chặt chẽ với việc xác thực thông tin người dùng. Nó sẽ định danh người dùng, và sau đó chia sẻ thông tin định danh được với các hệ thống con.

Một user khi đăng nhập vào hệ thống A thì domain của A sẽ lưu thông tin định danh vào cookie, để user này cũng là đã đăng nhập khi truy cập vào hệ thống B thì domain B sẽ phải đọc được cookie của A tạo ra, nhưng điều này là không thể. Với các trình duyệt hiện nay, domain chỉ có thể truy cập cookie do chính nó tạo ra.

Vì vậy, single sign-on sẽ phải chia sẻ thông tin cookie giữa các domain với nhau. Mỗi giao thức single sign-on sẽ có cơ chế chia sẻ khác nhau, nhưng điểm chung đều là tạo ra một domain trung tâm (central domain). Qua domain này, thông tin về cookie sẽ được chia sẻ đến các domain con. Ví dụ, central domain có thể tạo ra một json web token (jwt) và mã hóa nó. Khi ngươi dùng truy cập vào domain con thì sẽ được điều hướng đến domain trung tâm này, và token sẽ được trả lại và lưu ở phía trình duyệt. Sau đó, nếu người dùng tiếp tục truy cập vào domain con khác thì tương tự, cũng sẽ được điều hướng đến domain trung tâm, nhưng do lần này đã có token nên sẽ được định danh và việc đăng nhập lại là không cần thiết nữa.

Đọc xong cũng thấy khá logic, nhưng khi kéo xuống các câu hỏi bên dưới, thì mình thấy có một câu được rất nhiều vote up như thế này:

What is browser cookie storage and how it is accessible to by all three apps? I am supposing, the token should be stored by auth server and accessible to auth server, and after authentication browser is sending auth token with each request, and authenticated at auth server side, so why other apps are accessing browser cookie storage?

Since it’s a domain specific, private storage, shouldn’t the representation of browser storage not have all three domains pointing to it? They don’t share the same browser cookie storage. They only share the same information, but in different stores. Is that not correct? I realize that makes the visual a little more disparate, but the principle is an important one to understand and changes the flow slightly.