3. I. LỜI NÓI ĐẦU
3
SSO là một trong những yêu cầu bắt buộc cần phải có khi xây dựng hệ thống trên nền tảng
điện toán đám mây (Cloud Computing). Vì trên nền tảng này chúng ta cung cấp rất nhiều dịch
vụ các dịch vụ cài đặt ở nhiều server khác nhau và kê cả trên cùng một dịch vụ cũng có thể có
hàng trăm, nghìn server cân bằng tải đảm bảo hệ thống dữ liệu lớn và hoạt động xuyên suốt
24/7.
Bên cạnh đó SSO còn giúp giải quyết bài toán quản lý tài khoản tập trung cho nhiều ứng dụng
dạng dịch vụ (Giống như việc quản lý tài khoản tập trung của Google chỉ cần bạn đăng nhập
một lần và có thể sử dụng tất cả các dịch vụ khác được cung cấp từ Google như Doc, Mail,
Plus, YouTube,…).
Tài liệu này là một ví dụ minh họa cho việc xây dựng SSO với OpenSource.
Trên thực tế chúng tôi đã xây dựng thành công giải pháp SSO tùy biến trên các nền tảng
ASP.NET, PHP, JAVA không sử dụng opensource bên cạnh đó vẫn tuân thủ các chuẩn của
SAML.
Chúng tôi sẽ cung cấp hoàn toàn miễn phí về giải pháp kỹ thuật cho các cơ quan, tổ chức, cá
nhân hoạt động với mục đích phi lợi nhuận (như giáo dục, chính phủ).
SSO với SAML giải quyết được bài toán giải pháp không phụ thuộc vào nền tảng với chi phí
đầu tư ~0. Chỉ cần một ít kiến thức cơ bản chúng ta có thể tự mình xây dựng hoàn chỉnh.
4. I. SINGLE SIGN ON (SSO) – GIỚI THIỆU
4
Khi các hệ thống thông tin ngày càng mở rộng thì người
dùng, người quản trị phải đối mặt với giao diện ngày càng
phức tạp của phần mềm và họ phải thực hiện đăng ký tài
khoản, đăng nhập nhiều lần vào các hệ thống khác nhau
với tài khoản và các phương thức chứng thực khác nhau
để thực hiện các chức năng mà họ cần.
5. I. SINGLE SIGN ON (SSO) – GIỚI THIỆU
5
SSO là một phương thức điều khiển truy cập cho phép người dùng chỉ đăng
nhập một lần và có thể sử dụng chứng thực này trên các hệ thống phần mềm
độc lập với nhau trong suốt phiên truy cập.
LỢI ÍCH CỦA VIỆC SỬ DỤNG SSO
Giúp người dùng không mất thời gian để đăng nhập quá nhiều lần vào
các hệ thống khác nhau
Không cần phải nhớ quá nhiều mật khẩu và tài khoản.
Giảm chi phí cho việc hỗ trợ người dùng về tài khoản và mật khẩu
Quản lý tài khoản tập trung đồng bộ giữa các hệ thống.
6. I. SINGLE SIGN ON (SSO) – THÀNH PHẦN CỞ BẢN
6
1. Service provider:
Cung cấp các chức năng /nghiệp vụ mà người dùng cần
sử dụng
Kết nối với dịch vụ chứng thực của Identity provider .
Không quản lý tài khoản người dùng
1. Identity provider :
1. Quản lý tài khoản người dùng
2. Cung cấp đến các Service provider các dịch vụ chứng
thực
7. Ngày nay có rất nhiều hãng phần mềm cung cấp các sản
phẩm/ dịch vụ SSO. Tuy nhiên đa số các sản phẩm đều có
bản quyền thương mại. Tham khảo
(http://en.wikipedia.org/wiki/List_of_single_sign-
on_implementations)
Bên cạnh các phẩm/dịch vụ SSO, Security Assertion Markup
Language 2.0 (SAML 2.0) được phát triển như là một giao
thức cho phép trao đổi dữ liệu chứng thực bảo mật giữa các
hệ thống.
I. SINGLE SIGN ON (SSO) – PHƯƠNG THỨC CÀI ĐẶT
7
8. II. SECURITY ASSERTION MAKUP LANGUAGE 2.0 (SAML)
8
SAML được OASIS phát triển dựa trên ngôn ngữ XML.
SAML được công nhận như là một tiêu chuẩn trao đổi dữ liệu
vào tháng 3 năm 2005.
SAML được nhiều các nhân, tổ chức hỗ trợ và phát triển.
Với đặc điểm là một giao thức, ngôn ngữ, tiêu chuẩn SAML
cho phép:
Cài đặt trên nhiều nền tảng, công nghệ, ngôn ngữ lập trình
khác nhau.
Trao đổi được với nhiều hệ thống tuân thủ theo chuẩn
SAML.
Có thể mở rộng và tuỳ biến theo nhu cầu của cá nhân.
Hoàn toàn miễn phí.
13. III.SIMPLE SAML PHP – GIỚI THIỆU
13
SimpleSAMLphp là phần mềm mã nguồn mở viết bằng ngôn
ngữ php. Hỗ trợ giao thức SAML như là một Service Provider
và cả Identity Provider.
Thuận lợi của SimpleSAMLphp
Do được viết bằng php và sử dụng giao thức SAML nên
SimpleSAMLphp có thể chạy được trên bất kỳ nền tảng nào
Được thiết kế theo hướng module cho phép mở rộng
Đa ngôn ngữ
Đã qua kiểm tra
14. IV. CÀI ĐẶT VÀ CẤU HÌNH - SIMPLESAMLPHP
14
Download source tại:http://simplesamlphp.org/download
Cài đặt SimpleSAMLphp như là Service Provider
Thông tin tham khảo/hướng dẫn cấu hình.
http://simplesamlphp.org/docs/stable/simplesamlphp-sp
Cài đặt SimpleSAMLphp như là Identity Provider
Thông tin tham khảo/hướng dẫn cấu hình.
http://simplesamlphp.org/docs/stable/simplesamlphp-idp
Lưu ý để tránh tình trạng chồng chéo session nên không được phép cài
đặt cả Service Provider và Identity Provider thuộc cùng một domain.
15. IV. CÀI ĐẶT VÀ CẤU HÌNH - SIMPLESAMLPHP
15
Chuẩn bị:
1. Tạo domain cho service provider.
2. Tạo domain cho identity provider.
3. Tạo key ssl cho server (sử dụng openssl).
4. Giải nén source simplesamlphp vào các domain đã tạo.
5. Ghi nhận các thông tin domain để chuận bị cấu hình.
16. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (CẤU HÌNH CHUNG CHO CẢ SP VÀ
IDP)
16
1. CẤU HÌNH CHUNG CHO SIMPLE SAML PHP
Làm theo hướng dẫn từng bước tại:
http://simplesamlphp.org/docs/stable/simplesamlph
p-install
Lưu ý đổi tất cả các thông tin mật khẩu mặc định ỏ
file config thì simplesamlphp mới cho phép thực
thi.
Sau khi cấu hình thực hiện kiểm tra hoạt động của
simplesamlphp.
17. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (SERVICE PROVIDER -PHP)
17
2. CẤU HÌNH FILE CONFIG/AUTHSOURCES.PHP
Ví dụ cấu hình idp cho default sp:
'default-sp' => array('saml:SP‘,'idp' => 'http://demo10.e-
school.edu.vn/simplesaml/saml2/idp/metadata.php'),
18. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (SERVICE PROVIDER -PHP)
18
3. CẤU HÌNH METADATA CHO REMOTE IDP TẠI SP
Ví dụ cấu hình file /metadata/saml20-idp-remote.php
<?php$metadata['http://demo10.e-school.edu.vn/simplesaml/saml2/idp/metadata.php'] = array ( 'metadata-set' =>
'saml20-idp-remote', 'entityid' => 'http://demo10.e-school.edu.vn/simplesaml/saml2/idp/metadata.php',
'SingleSignOnService' => array ( 0 => array ( 'Binding' =>
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'http://demo10.e-
school.edu.vn/simplesaml/saml2/idp/SSOService.php', ), ), 'SingleLogoutService' => 'http://demo10.e-
school.edu.vn/simplesaml/saml2/idp/SingleLogoutService.php', 'certData' =>
'MIICpTCCAg4CCQD4gyrdy8ygpzANBgkqhkiG9w0BAQUFADCBljELMAkGA1UEBhMCdm4xFDASBgNV
BAgTC0hvIENoaSBNaW5oMRQwEgYDVQQHEwtIbyBDaGkgTWluaDEQMA4GA1UEChMHVmlldHRlbDE
RMA8GA1UECxMIdHR1ZGNudHQxEDAOBgNVBAMTB3ZpZXR0ZWwxJDAiBgkqhkiG9w0BCQEWFW1
pbmh0cmkuaXRwQGdtYWlsLmNvbTAeFw0xMzAyMDYxMTE4NDZaFw0xNDAyMDYxMTE4NDZaMIGW
MQswCQYDVQQGEwJ2bjEUMBIGA1UECBMLSG8gQ2hpIE1pbmgxFDASBgNVBAcTC0hvIENoaSBNaW
5oMRAwDgYDVQQKEwdWaWV0dGVsMREwDwYDVQQLEwh0dHVkY250dDEQMA4GA1UEAxMHdmll
dHRlbDEkMCIGCSqGSIb3DQEJARYVbWluaHRyaS5pdHBAZ21haWwuY29tMIGfMA0GCSqGSIb3DQEBA
QUAA4GNADCBiQKBgQDAERXrONa3IThAZcqV2qt1i16nxFw9j2N6zUp9vBh316cIAYpp+Xi/ls/
+iN7Up6ktkt9hCRPKJ/vn4Pcbk8+dHfip90oDoZz0Aiq7NoLTib4xwDUoBOAKdjueUVcLDPSinV6mWKsy7R/
VF0VgNbcZQin607bMDkcsuUiRAl6sWwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAJKyRtKK0xgNYBt
uanubq6ZC67oJfrIAvqA2eivTCf2Y823AMTYggKnX5iFKwe6Ok4ewwKV11UYdiUC6G9oZdP4uq7MD3ak3b
4gWp3l8rgD4jU00cpI9PWA5EhdTAbJo8y9swWXq+L66RzHy53Dm+kDVlKGKiLXbvrKkvnqY2YvT',
'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',);
19. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (SERVICE PROVIDER –ASP.NET)
19
TẠO SAML REQUEST
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="_d3b8b3d463d0e03c48296e578ff0469a5159c8a944" Version="2.0"
IssueInstant="2013-02-18T02:57:14Z" Destination="http://demo10.e-
school.edu.vn/simplesaml/saml2/idp/SSOService.php"
AssertionConsumerServiceURL="http://localhost:3955/dotnetSaml/Consume.aspx"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-
POST"><saml:Issuer>http://localhost:3955/dotnetSaml/Consume.aspx</saml:Issuer
><samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-
format:transient" AllowCreate="true"/></samlp:AuthnRequest>
20. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (SERVICE PROVIDER –ASP.NET)
20
MÃ HÓA SAML REQUEST
Sử dụng công cụ theo link bên dưới để chuyển yêu cầu dạng saml
thành dạng mã hoá url (byte code).
CÔNG CỤ:
https://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php
KẾT QUẢ SAU KHI MÃ HÓA:
lZJNb%2BJADIb%2FSjT3ZPIFhBEgUVBVpG5BDbuHvVRDxjQjTWayY6dl%2F%2F0mQFfsBWkvPth
%2B7NevPEPZmFYsO6rtK
%2FzqACk4NcaiOBfmrPNWOIkahZUNoKBKlMtvzyKNYtF6R65yht0g9wmJCJ60syzYrOfsTWWH4pCpfJyp
GOKsyot0OobRpDge43w8laNkNK0KOc1zFvwAjz05Z%2F2gHkfsYGORpKU%2BFSdZGKdhUuzjVIwmIsl
%2FsmDdX6OtpDNVE7WCcwWNS%2BIIQqxq50wEqos%2BLEfdtAaGA%2FgQUq5Vy8tyW4L
%2F0BVEbd2yYPmlfuUsdg34a%2FX76%2FPf
%2BcZV0tQOSSTppCi4cmSBymHwlYokticW7K7mPWirtH2%2F79vh0oTiab%2FfhbttuWeL2SBUnH3wi%2F
%2FbPuO37OzyAy%2F91s1654yufgePzjeS7osaMlqFx3OrIC8tarDU%2B2SM
%2B1x5kARzRr4DxheXlf9%2B2uIP
21. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (SERVICE PROVIDER –ASP.NET)
21
TẠO YÊU CẦU CHỨNG THỰC GỬI ĐẾN IDP:
Sau khi thực hiện mã hoá tiếp theo sẽ tạo yêu cầu chứng thực gửi đến idp
Ví dụ yêu cầu chứng thực được tạo ra trên asp.net provider
http://demo10.e-school.edu.vn/simplesaml/saml2/idp/SSOService.php?SAMLRequest=lZJNb%2BJADIb
%2FSjT3ZPIFhBEgUVBVpG5BDbuHvVRDxjQjTWayY6dl%2F%2F0mQFfsBWkvPth%2B7NevPEPZmFYsO6rtK
%2FzqACk4NcaiOBfmrPNWOIkahZUNoKBKlMtvzyKNYtF6R65yht0g9wmJCJ60syzYrOfsTWWH4pCpfJypGOKsy
ot0OobRpDge43w8laNkNK0KOc1zFvwAjz05Z%2F2gHkfsYGORpKU%2BFSdZGKdhUuzjVIwmIsl
%2FsmDdX6OtpDNVE7WCcwWNS%2BIIQqxq50wEqos%2BLEfdtAaGA%2FgQUq5Vy8tyW4L
%2F0BVEbd2yYPmlfuUsdg34a%2FX76%2FPf
%2BcZV0tQOSSTppCi4cmSBymHwlYokticW7K7mPWirtH2%2F79vh0oTiab%2FfhbttuWeL2SBUnH3wi%2F
%2FbPuO37OzyAy%2F91s1654yufgePzjeS7osaMlqFx3OrIC8tarDU%2B2SM%2B1x5kARzRr4DxheXlf9%2B2uIP
Tạo asp request và redirect đến trang ứng dụng của sp với url đã tạo ở bước
trên
Response.Redirect(“http://demo10.e-school.edu.vn/simplesaml/saml2/idp/SSOService.php?SAMLRequest=lZJNb%2BJADIb
%2FSjT3ZPIFhBEgUVBVpG5BDbuHvVRDxjQjTWayY6dl%2F%2F0mQFfsBWkvPth%2B7NevPEPZmFYsO6rtK
%2FzqACk4NcaiOBfmrPNWOIkahZUNoKBKlMtvzyKNYtF6R65yht0g9wmJCJ60syzYrOfsTWWH4pCpfJypGOKsyot0OobRpDge43w8laNkNK0KOc
1zFvwAjz05Z%2F2gHkfsYGORpKU%2BFSdZGKdhUuzjVIwmIsl%2FsmDdX6OtpDNVE7WCcwWNS%2BIIQqxq50wEqos%2BLEfdtAaGA
%2FgQUq5Vy8tyW4L%2F0BVEbd2yYPmlfuUsdg34a%2FX76%2FPf%2BcZV0tQOSSTppCi4cmSBymHwlYokticW7K7mPWirtH2%2F79vh0oTiab
%2FfhbttuWeL2SBUnH3wi%2F%2FbPuO37OzyAy%2F91s1654yufgePzjeS7osaMlqFx3OrIC8tarDU%2B2SM%2B1x5kARzRr4DxheXlf9%2B2uIP”);
22. IV. CÀI ĐẶT VÀ CẤU HÌNH – SIMPLESAMLPHP (IDENTITY PROVIDER -PHP)
22
CẤU HÌNH METADATA CHO REMOTE SP TẠI IDP
Ví dụ cấu hình file /metadata/saml20-sp-remote.php
<?php
$metadata['https://sp.smas.vn/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = array (
'AssertionConsumerService' => 'https://sp.smas.vn/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
'SingleLogoutService' => 'https://sp.smas.vn/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
);
$metadata['https://mytest.vn/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = array (
'AssertionConsumerService' => 'https://mytest.vn/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
'SingleLogoutService' => 'https://mytest.vn/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
);
$metadata['http://localhost:3955/dotnetSaml/Consume.aspx'] = array (
'AssertionConsumerService' => 'http://localhost:3955/dotnetSaml/Consume.aspx',
'SingleLogoutService' => '',
);
23. IV. CÀI ĐẶT VÀ CẤU HÌNH – SỬ DỤNG OPENSSL
23
Hướng dẫn cấu hình ssl và tạo serverkey cho apache
Sử dụng phần mềm openssl và làm theo hướng dẫn theo link
bên dưới
• Link download openssl: http://gnuwin32.sourceforge.net/packages/openssl.htm
• Link hướng dẫn :http://stackoverflow.com/questions/4221874/how-do-i-create-https-
for-localhost-apache
24. V. VẤN ĐỀ KHI ÁP DỤNG
24
Cần xây dựng lại mô hình quản lý người
dùng cho identity provider.
Xây dựng phương pháp chứng thực phù hợp.
Xậy dựng các thuộc tính trao đổi về thông tin
người dùng giữa identity provider và service
provider.