Thursday, May 12, 2016

Tìm hiểu Single Sign On



    1.1. Single Sign On.
    1.1.1. Khái niệm.
    SSO còn được gọi là ESSO cho phép nhập cùng một id/password để đăng nhập
    nhiều ứng dụng trong cùng một tổ chức (Enterprise).
    Ví dụ:
    Người dùng sử dụng nhiều dịch vụ như: Đăng ký môn học, hê thống xem điểm, … ứng mỗi dịch vụ chúng ta có một tài khoản riêng. Trước đây, khi chưa sử dụng SSO thì khi với mỗi dịch vụ chúng ta đều phải nhập thông tin để xác thực. Khi một tổ chức đã thống nhất sử dụng SSO cho tất cả các dịch vụ của họ thì người dùng chỉ cần đăng nhập một lần duy nhất trên bất kỳ dịch vụ nào trong tổ chức, thì khi truy xuất những dịch vụ khác, người dùng không cần phải đăng nhập lại.

    1.1.2. Lợi ích.
    - Tránh việc nhớ nhiều thông tin đăng nhập (username & password) khi dùng nhiều dịch vụ.
    - Tiết kiệm thời gian khi tái lập lại mật khẩu cho một người dùng (identity user).
    - Bảo mật tất cả các cấp độ của việc thoát hay truy xuất vào hệ thống.
    - Người phát triển ứng dụng không cần phải hiểu và thực hiện nhận dạng bảo mật trong ứng dụng của họ.

    1.1.3 Các giải pháp Single Sign On.
    - Open Single Sign-On (OpenSSO) hoạt đông dựa trên Token.
    - Central Authenticate Service (CAS) hoạt đông dựa trên Ticket.
    - JOSSO (Java Open Sigle Sign On), CoSign,…
    Nguồn: 
    http://xacthucsso.blogspot.com/2013/07/tim-hieu-single-sign-on.html

Ứng dụng hệ thống kiểm soát truy nhập mạng theo mô hình truy nhập một lần

Bài báo giới thiệu Hệ thống xác thực truy nhập một lần (SSO), so sánh phân tích và đánh giá các giải pháp SSO, đồng thời trình bày kết quả nghiên cứu triển khai ứng dụng theo mô hình CAS.
1. Giải pháp kiểm soát truy nhập hệ thống SSO
Hiện nay, ứng dụng chạy trên các máy chủ lớn dần được thay thế bằng các ứng dụng mạng phân tán khách - chủ (client - server) thông qua một lượng lớn các hệ thống nhỏ chạy trên các hạ tầng độc lập với số lượng người dùng và hệ thống cần quản trị tăng lên nhanh chóng.
Mỗi lần truy nhập một dịch vụ của hệ thống, người dùng phải khai báo thông tin về mật khẩu và tên đăng nhập cho hệ thống xác thực. Do vậy, người dùng phải nhớ rất nhiều cặp tên truy cập/mật khẩu khác nhau và phải đăng nhập nhiều lần. Điều này gây khó khăn cho người dùng và nhà cung cấp dịch vụ, người quản trị cũng phải đối mặt với một loạt vấn đề như bảo mật, mã hóa, lưu trữ cơ sở dữ liệu. 
Trước đây, để giải quyết vấn đề này, người sử dụng bắt buộc phải nhớ các thông tin đăng nhập, hoặc lưu trong các file có mã hóa, hoặc sử dụng một chương trình quản lý tài khoản trên máy tính của họ. Tuy nhiên, người dùng vẫn phải nhớ quá nhiều tên truy cập/mật khẩu, người quản trị luôn nhận được các yêu cầu tạo lại mật khẩu và kích hoạt lại tài khoản người dùng, do họ gặp phải các sự cố về thông tin đăng nhập. 
Một giải pháp cho vấn đề trên là sử dụng một kỹ thuật xác thực một lần cho tất cả các tài khoản có yêu cầu bảo mật khác nhau. 
Giải pháp này vừa đảm bảo tính thuận tiện, vừa tăng độ bảo mật khi sử dụng. Hơn nữa, áp lực trong việc quản lý tài khoản đối với nhà quản trị hệ thống có thể được giảm xuống. Hệ thống SSO có khả năng tích hợp và kết hợp các hệ thống tài khoản khác nhau. Điều này sẽ đem lại lợi ích cả cho người dùng và nhà cung cấp dịch vụ. 
Ưu điểm của giải pháp SSO
Đối với người dùng: Hệ thống SSO cung cấp cho người dùng công cụ xác thực đăng nhập một lần. Công cụ này xác thực người dùng đăng nhập vào mọi hệ thống có tích hợp giải pháp SSO, vì vậy, người dùng chỉ cần nhớ một cặp tên truy cập/mật khẩu duy nhất.
Khi cập nhật mật khẩu và tên đăng nhập, người dùng chỉ cần cập nhật một lần cho toàn bộ các hệ thống có yêu cầu xác thực người dùng.
Khi đã đăng nhập vào một hệ thống chứa các hệ thống con có tích hợp giải pháp SSO, người dùng có thể dễ dàng truy nhập vào các hệ thống con này mà không cần phải xác thực lại trong một khoảng thời gian nào đó, tùy thuộc vào chính sách quản trị.
Đối với nhà cung cấp dịch vụ, quản trị hệ thống:
Người quản trị chỉ cần bảo mật và quản lý thông tin đăng ký của người dùng một lần, vì vậy có thể giảm dung lượng cơ sở dữ liệu và tránh được các xung đột nảy sinh do phải xử lý mật khẩu của các hệ thống khác nhau, tăng khả năng mở rộng và triển khai các chiến lược bảo mật.
Người quản trị có thể thay đổi và cập nhật thông tin được bảo mật của người dùng khi cần thiết, một cách dễ dàng hơn so với việc thay đổi ở từng hệ thống riêng lẻ mà người dùng đó được phép truy cập. Điều này rất hữu ích khi người dùng thay đổi vị trí của mình với các cấp độ bảo mật khác nhau.
Nhược điểm của giải pháp SSO
Việc xử lý một loạt các hệ thống con có tích hợp giải pháp SSO không đơn giản, bởi vì mỗi hệ thống con có thể hoạt động trên các nền phần cứng và phần mềm khác nhau. Vì vậy, khi cài đặt sẽ phải giải quyết nhiều vấn đề liên quan đến tính tương thích và đồng bộ giữa các hệ thống.
Khi đã được xác thực thành công, người dùng có thể truy nhập vào nhiều ứng dụng trong hệ thống. Bởi vậy, nếu không được bảo mật tốt tại các hệ thống con, thì đối tượng tấn công khi tiếp cận vào một ứng dụng có thể tấn công vào toàn bộ hệ thống. 
Các kỹ thuật mang tính mở áp dụng với hệ thống hoặc chưa được chuẩn hóa, hoặc chưa được cung cấp, có thể gây mâu thuẫn và không tương thích với các sản phẩm khác.
Thách thức đối với giải pháp SSO là làm việc theo kiến trúc, các cơ chế bảo mật độc lập đối với các nền ứng dụng. Để thuận tiện và đơn giản hơn khi giải quyết nhược điểm của SSO, người ta thường đi theo hướng xây dựng các ứng dụng sử dụng cơ sở hạ tầng bảo mật, xác thực người dùng chung, thông suốt giữa các ứng dụng. Điều này đòi hỏi phải có định dạng chung khi thể hiện các thông tin xác thực hoặc ủy nhiệm, sao cho tất cả các ứng dụng đều có thể hiểu và chấp nhận chúng. Đồng thời, phải đảm bảo được các ủy nhiệm là đúng đắn.
Mặc dù có một số nhược điểm, nhưng giải pháp SSO vẫn đang được triển khai rộng rãi ở nhiều nước trên thế giới, trong nhiều hệ thống thông tin có nhu cầu xác thực và bảo mật. Nó được đánh giá là một trong các giải pháp hiệu quả, tiện dụng và kinh tế khi triển khai trên diện rộng. Các vấn đề nêu trên sẽ được giải quyết trong thời gian tới khi chúng ta tăng cường chuẩn hóa và có các chính sách cụ thể cho vấn đề này. 
2. Một số mô hình SSO thực tế
Các hệ thống xác thực SSO đang được sử dụng rộng rãi là: CAS (Central Authentication Service), WebAuth. RSA Single Sign On Manager, Open Single Sign - On (OpenSSO) hoạt động dựa trên Token, Java Open SSO (JOSSO).
Open SSO Enterprise
OpenSSO là một sản phẩm mã nguồn mở của SUN. Nó là một sản phẩm đơn lẻ, kết hợp các tính năng của Sun Java System. Access Manager, Sun Java System Federation Manager và Sun System SAML v2 Java Plugin, kiểm soát truy nhập, đảm bảo an toàn các dịch vụ web và các dịch vụ định danh Web. Khi truy cập vào những tài nguyên được bảo vệ của người dùng, yêu cầu truy cập cần được xác thực và phải có đủ quyền truy cập. Khi một người gửi yêu cầu để truy cập tài nguyên được bảo vệ, policy agent chặn yêu cầu này và kiểm tra. Nếu OpenSSO token được tìm thấy không hợp lệ, policy agent sẽ yêu cầu máy chủ tiến hành xác thực và cấp phép (Hình 1).

Hình 1: Mô hình đăng nhập duy nhất OpenSSO
Policy agent là ứng dụng web với nhiệm vụ ngăn tất cả yêu cầu đến ứng dụng, để kiểm tra xem người dùng đã xác thực hay chưa (Hình 2).


Hình 2: Cơ chế hoạt động của OpenSSO
Cơ chế hoạt động của OpenSSO như sau:
- Từ trình duyệt, người dùng kết nối đến ứng dụng web.
- Policy Agent sẽ kiểm tra token có tồn tại trong URL hay không. Nếu token chưa tồn tại thì Policy Agent sẽ chuyển trình duyệt đến OpenSSO máy chủ.
- OpenSSO máy chủ xác thực người dùng thông qua trang đăng nhập. Người dùng nhập tên truy cập/mật khẩu để xác thực.
- OpenSSO (tạo ra session cho người dùng và kích hoạt nó nếu xác thực thành công).
- OpenSSO gửi token cho trình duyệt (trình duyệt sẽ lưu token dưới dạng cookie) và Trình duyệt sẽ gửi token đến cho Agent. 
- Policy Agent sẽ lấy thông tin token gửi đến OpenSSO máy chủ để kiểm tra. 
- OpenSSO sẽ gửi thông tin đăng nhập (tên truy cập, mật khẩu) và thông tin vai trò đến Agent nếu kiểm tra token hợp lệ.
- Policy Agent sẽ quyết định cho phép truy cập ứng dụng hay không và ghi thông tin session trên URL.
Giải pháp Dịch vụ xác thực trung tâm CAS
CAS (Central Authenticate Service) là một giải pháp SSO mã nguồn mở được phát triển bởi đại học Yale, với các tính năng như sau: 
- CAS hỗ trợ nhiều thư viện phía máy khách được viết bởi nhiều ngôn ngữ: PHP, Java, PL/SQL. Nó lấy thông tin SSO thông qua cookie. Cookie này sẽ bị hủy khi người dùng đăng xuất khỏi CAS hoặc đóng trình duyệt. Cookie được sinh ra bởi CAS, còn được gọi là TGC (Ticket Granting Cookie) chứa một ID duy nhất.
- CAS cung cấp nhiều trình quản lý xác thực (authenticate handler) khác nhau. CAS xác thực nhiều loại thông tin người dùng như tên truy cập/mật khẩu, chứng chỉ khóa công khai X509,... để xác thực những thông tin người dùng khác nhau này, CAS sử dụng những trình quản lý xác thực tương ứng.
- CAS cung cấp tính năng “Remember me”. Người phát triển có thể cấu hình tính năng này trong nhiều file cấu hình khác nhau và khi người dùng chọn “Remember me” trên khung đăng nhập, thì thông tin đăng nhập sẽ được ghi nhớ với thời gian được cấu hình. Khi người dùng mở trình duyệt thì CAS sẽ chuyển đến service URL tương ứng mà không cần hiển thị khung đăng nhập.
Nguyên tắc hoạt động của CAS như sau:
Chứng thực người dùng với máy chủ CAS
- Người dùng nhập tên truy cập/mật khẩu vào khung đăng nhập. Các thông tin này được truyền cho CAS máy chủ thông qua giao thức HTTPS.
- Xác thực thành công, TGC được sinh ra và thêm vào trình duyệt dưới hình thức là cookie. TGC này sẽ được sử dụng để đăng nhập với tất cả các ứng dụng (Hình 3).


Hình 3: Người dùng truy cập vào ứng dụng khi đã chứng thực với CAS máy chủ
Truy cập vào ứng dụng của người dùng
Trường hợp người dùng truy cập vào ứng dụng khi đã chứng thực với CAS máy chủ:
- Người dùng truy xuất ứng dụng thông qua trình duyệt.
- Ứng dụng lấy TGC từ trình duyệt và chuyển nó cho CAS máy chủ thông qua giao thức HTTPS.
- Nếu TGC này là hợp lệ, CAS máy chủ trả về một Service Ticket (ST) cho trình duyệt, trình duyệt truyền ST vừa nhận cho ứng dụng.
- Ứng dụng sử dụng ST nhận được từ trình duyệt và sau đó chuyển nó cho CAS máy chủ.
- CAS máy chủ sẽ trả về ID của người dùng cho ứng dụng, mục đích là để thông báo với ứng dụng là người dùng này đã được chứng thực bởi CAS máy chủ.
- Ứng dụng đăng nhập cho người dùng và bắt đầu phục vụ người dùng.
Trường hợp người dùng truy cập vào ứng dụng mà chưa chứng thực với CAS máy chủ:
- Người dùng truy xuất ứng dụng thông qua trình duyệt. Vì chưa nhận được TGC nên ứng dụng sẽ chuyển hướng người dùng cho CAS máy chủ.
- Người dùng cung cấp tên truy cập/mật khẩu của mình thông qua khung đăng nhập để CAS xác thực. Thông tin được truyền đi thông qua giao thức HTTPS.
- Xác thực thành công, CAS máy chủ sẽ trả về cho trình duyệt đồng thời cả TGC và ST.
- Trình duyệt sẽ giữ lại TGC để sử dụng cho các ứng dụng khác (nếu có) và truyền ST cho ứng dụng nêu trên.
- Ứng dụng chuyển ST cho CAS máy chủ và nhận về ID của người dùng.
- Ứng dụng đăng nhập cho người dùng và bắt đầu phục vụ người dùng (Hình 4).


Hình 4: Người dùng truy cập ứng dụng mà chưa chứng thực với CAS
3. Ứng dụng thực tế 
Cổng thông tin Liferay được xây dựng dựa trên mã nguồn mở, viết bằng ngôn ngữ java và phát hành dưới bản quyền GNU LGPL. Cổng thông tin Liferay cho phép người dùng cài đặt những chức năng chung cho website. Đó là những bộ phận chức năng cơ bản được gọi là portlet. Liferay hỗ trợ những plugin mở rộng đa ngôn ngữ, bao gồm cả portlet cho PHP và Ruby. Cổng thông tin Liferay chạy trên bất cứ môi trường chạy Java Runtime Environment nào. Liferay đi cùng bộ với server Apache Tomcat. 
Alfresco là phần mềm nguồn mở theo giấy phép GNU, dùng để quản lý tài liệu, hỗ trợ cho các doanh nghiệp trong việc tổ chức lưu trữ tài liệu điện tử một cách khoa học và hiệu quả. Alfresco dùng cho Microsoft Windows và các hệ điều hành Linux, Solaris với hai phiên bản: Alfresco Community Edition là phần mềm dựa trên các chuẩn mở và giấy phép mã nguồn mở LGPL. Alfresco Enterprise Edition là phiên bản thương mại dùng cho doanh nghiệp. Alfresco bao gồm: kho quản trị nội dung; web portal framework dùng cho việc quản lý và sử dụng nội dung được lưu trữ, một giao thức CIFS hỗ trợ tương thích với hệ thống file trên Microsoft Windows và các hệ điều hành Linux, Solaris; hệ thống quản lý nội dung web có khả năng xây dựng các ứng dụng web và website tĩnh qua Apache Tomcat; công nghệ tìm kiếm Lucene; công nghệ quản lý quy trình làm việc jBPM. Hệ thống Alfresco được phát triển trên công nghệ Java.
Người ta có thể xây dựng và tích hợp thành công hệ thống Liferay với CAS và tích hợp thành công Alfresco với CAS để thực hiện quá trình truy cập một lần trên hai ứng dụng.
TS. Hồ Văn Hương, ThS. Đào Thị Ngọc Thùy tổng hợp
Nguồn http://antoanthongtin.vn/Detail.aspx?CatID=8ab90f49-a562-4157-a607-d2474bf129a9&NewsID=1caffb79-e759-4855-91fc-76840dfc5424