Đăng nhập một lần
(sso) là gì?
Giới thiệu
Ngày nay, hầu hết các trang web yêu cầu xác thực người dùng để truy cập các tính năng và nội dung của chúng. Khi số lượng trang web tăng lên, tất nhiên số lượng tài khoản mà mỗi người dùng cần phải có cũng tăng theo. Giả sử bạn đang sử dụng 10 dịch vụ khác nhau, mỗi dịch vụ là truy cập vào một dịch vụ khác nhau, dịch vụ này yêu cầu ít nhất 2 thông tin cơ bản: tên người dùng và mật khẩu. Vâng, hãy nhớ tất cả những điều này là mệt mỏi! Sẽ thông minh hơn nếu sử dụng cùng một tên người dùng và mật khẩu cho các dịch vụ này, nhưng với 10 dịch vụ, việc đăng nhập 10 lần là điều không thể tránh khỏi! ! ! Do đó, đăng nhập một lần đã 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
Ưu và nhược điểm
Một số lợi ích của đăng nhập một lần là:
- Giảm số lượng tên người dùng và mật khẩu mà người dùng cần nhớ
- Giảm số lần bạn nhập tên người dùng và mật khẩu của mình
- Nguy cơ rò rỉ thông tin người dùng cũng được giảm bớt
- Chi phí phát triển khi sử dụng dịch vụ của bên thứ ba
- Phụ thuộc vào các dịch vụ bên ngoài
- Xác thực
- Ủy quyền
- Trao đổi thuộc tính người dùng
- Quản lý Người dùng
-
Bộ nhớ cục bộ không được chia thành nhiều bộ lưu trữ con, mà chỉ có một bộ lưu trữ cục bộ, tất cả cookie sẽ được lưu trữ ở một nơi, dưới dạng khóa (dưới dạng miền) và giá trị. Chỉ, các miền chỉ có thể truy cập vào dữ liệu mà chúng tạo ra.
-
Không có cái gọi là các miền sử dụng cookie của nhau. Các miền sẽ tự động yêu cầu từ miền trung tâm và tự lưu các cookie được trả lại, sau đó, đối với mỗi yêu cầu, các miền sẽ sử dụng cookie mà chúng có.
-
Hầu hết các dịch vụ sso ngày nay (chẳng hạn như auth0) có hai cách để xử lý vấn đề này:
- Do bản chất của cookie, các miền và miền phụ có thể được truy cập qua lại, do đó miền trung tâm sẽ là miền phụ của một trong các miền phụ. Ví dụ: tên miền con là abc.com thì auth0 sẽ tạo tên miền trung tâm là auth0.abc.com. Sau đó, nếu người dùng đăng nhập trên abc.com, sẽ có một cookie được lưu trữ trong bộ nhớ cục bộ mà cả abc.com và auth0.abc.com đều có thể truy cập được. Sau đó, nếu người dùng đăng nhập tại edf.com, anh ta sẽ được chuyển hướng đến miền trung tâm của auth0.abc.com và sẽ có cookie, sau đó người dùng sẽ được xác thực
- Sử dụng Chia sẻ Tài nguyên Nhiều Nguồn gốc
Đăng nhập mạng xã hội
Đăng nhập mạng xã hội cũng là một hình thức đăng nhập một lần, sử dụng thông tin đăng nhập có sẵn của các hệ thống mạng xã hội như facebook và google để cho phép người dùng đăng ký các dịch vụ của bên thứ ba mà không cần tạo tài khoản. Miền trung tâm khi đó sẽ là miền của mạng xã hội.
Kết thúc
Bài viết này được lấy cảm hứng từ https://auth0.com/blog/what-is-and-how-does-single-sign-on-work/ và có một số ý kiến chủ quan của tác giả.
Tuy nhiên, một số hạn chế không thể bỏ qua:
Cơ chế hoạt động
Hệ thống nhận dạng liên kết
Bảng chú giải thuật ngữ nhận dạng liên kết là nơi thông tin người dùng được thu thập và liên kết. Hệ thống bao gồm 4 yếu tố cơ bản:
Xác thực có nghĩa là: Kiểm tra thông tin đăng nhập và xác định người dùng.
Phân quyền dựa vào số nhận dạng để kiểm tra quyền truy cập của người dùng.
Trao đổi thông tin người dùng Mỗi hệ thống con cần và lưu trữ thông tin người dùng khác nhau, nhưng sẽ có thông tin trùng lặp, chẳng hạn như tên, họ …. Vì vậy, cần có một nơi để tổng hợp thông tin này, và hoán đổi nó cho một hệ thống con.
Quản lý người dùng Quản trị viên có thể quản lý người dùng bằng cách thêm, sửa, xóa … trong hệ thống con.
Đăng nhập một lần là một phần của hệ thống nhận dạng liên bang và có liên quan chặt chẽ đến việc xác thực thông tin người dùng. Nó sẽ xác định người dùng và sau đó chia sẻ thông tin nhận dạng với hệ thống con.
Cơ chế
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.
Sau khi đọc câu này thì có vẻ hợp lý, nhưng khi tôi cuộn xuống câu hỏi bên dưới, tôi thấy câu này nhận được rất nhiều phiếu bầu:
Lưu trữ cookie của trình duyệt là gì và làm cách nào để cả ba ứng dụng truy cập vào nó? Tôi nghĩ rằng, mã thông báo nên được máy chủ xác thực lưu trữ và có thể truy cập được và sau khi trình duyệt xác thực gửi mã thông báo xác thực cho mỗi yêu cầu và xác thực ở phía máy chủ xác thực, vậy tại sao các ứng dụng khác của chương trình đang truy cập vào bộ lưu trữ cookie của trình duyệt?
Vì đây là một cửa hàng tư nhân dành riêng cho miền cụ thể, không nên đại diện của cửa hàng trình duyệt không trỏ đến nó cho cả ba miền? Chúng không chia sẻ cùng một kho lưu trữ cookie của trình duyệt. Họ chỉ chia sẻ cùng một thông tin, nhưng ở các cửa hàng khác nhau. Điều này có chính xác không? Tôi nhận ra rằng điều này sẽ làm cho hình ảnh trở nên khác biệt hơn, nhưng các nguyên tắc quan trọng là phải hiểu và thay đổi quy trình một chút.
Tìm hiểu: Trình duyệt lưu trữ cookie như thế nào? Tôi hiểu rằng mỗi miền có bộ nhớ riêng trong tổng bộ nhớ cục bộ để lưu trữ cookie. Khi truy cập vào domain1 và được chuyển hướng đến miền trung tâm thì sẽ có cookie được lưu trong kho lưu trữ của miền1 và miền trung, khi đó, làm cách nào để sử dụng domain2 để lấy cookie trung tâm, tôi nghĩ câu hỏi này cũng sẽ có rất nhiều người muốn biết. (vì có nhiều lượt ủng hộ) nên tôi muốn chia sẻ một số thông tin chi tiết: