Hiện nay, số lượng người dùng nghe nhạc trên mạng ngày càng nhiều và để có thể tải nhạc và bình luận vào những bài hát mà người dùng yêu thích thì người dùng phải có tài khoản trên những trang web âm nhạc này. Do vậy, để tránh phải đăng ký
một tài khoản mới trên mỗi trang web âm nhạc như vậy thì chương trình thực nghiệm đưa ra ngữ cảnh sau:
1. Trang web sannhac.com là nơi lưu trữ những bài hát của các ca sĩ và những bài thu âm của người dùng.
2. Người dùng muốn tải và bình luận những bài hát và những bài thu âm thì người dùng phải có tài khoản trên trang Sannhac.com.
3. Để tránh phải đăng ký một tài khoản mới thì người dùng sử dụng một thẻ CardSpace được tạo ra trên máy tính như là một tài khoản trên trang Sannhac.com. Người dùng có thể sử dụng thẻ CardSpace này để có thể đăng nhập, tải nhạc và bình luận.
4. Trang Sannhac.com phải hỗ trợ việc đăng nhập bằng thẻ CardSpace.
5. Việc xác thực những thông tin của người sử dụng thẻ là hợp lệ hay không được thực hiện bởi nhà cung cấp định danh là Google.
Trong trường hợp này thì: RP là sannhac.com, IdP là Google và IS là giao diện màn hình CardSpace.
Ngữ cảnh của người dùng khi tham gia và trang web sannhac.com được minh họa như trên Hình 4.1.
Hình 4.1: Ngữ cảnh thực thi chương trình
Relying Party (sannhac.com)
Người dùng CardSpace
Identity Provider (Google)
2
3
4 5
Đầu tiên ngườ i dùng truy cập vào trang sannhac .com và đăng nhập bằng c ách dùng thẻ CardSpace . Identity Selector (IS) được hiển thị bằng cách sử dụng thẻ <object> và nội dụng trong trong thẻ <object> có dạng như trong Hình 4.2 và giao diện người dùng lựa chọn CardSpace được hiển thị như trong Hình 4.3:
Hình 4.2: Đoạn mã hiển thị Identity Selector
Hình 4.3: Chức năng người dùng lựa chọn CardSpace để đăng nhập
Khi người dùng ấn vào biểu tượng CardSpace thì một đoạn mã javascript như trong Hình 4.4 được thực thi để có thể gọi được thẻ CardSpace của Microsoft. Đoạn mã này yêu cầu những thẻ CardSpace phải có thông tin về các trường như:
<object type="application/x-informationcard" name="_xmlToken">
<param name="tokenType" value="urn:oasis:names:tc:SAML:1.0:assertion" /> <param name="issuer" value="http://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self" /> <param name="requiredClaims" value="http://schemas.xmlsoap.org/ws/2005/05/identity/claims /givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress http://schemas.xmlsoap.org/ws/2005/05/identity/claims /privatepersonalidentifier" /> </object>
emailaddress, givenname, streetaddress, gender, webpage, privatepersonalidentifier thì mới được hiển thị trên màn hình Identity Selector của Microsoft.
Hình 4.4: Đoạn mã javascript thực hiện việc gọi CardSpace của Microsoft 1. function SubmitCard(card){
2. var strPath = 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/'; 3. card.issuer = 'http://schemas.xmlsoap.org/ws/2005/05/identity/issuer/self'; 4. card.requiredClaims.Add(strPath + 'emailaddress'); 5. card.requiredClaims.Add(strPath + 'givenname'); 6. card.requiredClaims.Add(strPath + 'streetaddress'); 7. card.requiredClaims.Add(strPath + 'gender'); 8. card.requiredClaims.Add(strPath + 'webpage'); 9. card.optionalClaims.Add(strPath + 'privatepersonalidentifier'); 10. var token = document.getElementById("CardSpaceToken2"); 11. try{
12. token.value = card.value; 13. }catch (e){
14. Alert("error:" + e.number); 15. }
16. var claims = getClaims(token); 17. var openid_identifier = "";
18. for(var i = 0; i < claims.length; i++){ 19. var webpage = strPath + 'webpage'; 20. var uname = strPath + 'givenname'; 21. var mail = strPath + 'emailaddress'; 22. if (claims[i].type == webpage) {
23. openid_identifier = claims[i].value; 24. } else if (claims[i].type == uname) {
25. username = claims[i].value;
27. } else if (claims[i].type == mail) {
28. email = claims[i].value;
29. }
30. }
31. openLoginWindow2(openid_identifier); 32. }
Sau khi đoạn mã javascript ở Hình 4.4 được thực thi thì màn hình giao d iện Identity Selector của Microsoft được hiển thị để người dùng có thể chọn hoặc tạo một thẻ phù hợp với trang sannhac.com. Giao diện IS được minh họa trong Hình 4.5.
Hình 4.5: Người dùng lựa chọn CardSpace trên giao diện IS Sau khi người dùng chọn và gửi một CardSpace phù hợp thì chương trình
Extension sẽ chặn mã SAML chứa thông tin của thẻ CardSpace này và sẽ khởi tạo, xây dựng một yêu cầu xác thực OpenID, yêu cầu này sẽ được Extension chuyển hướng tới Google. Yêu cầu OpenID này có nhúng thêm yêu cầu chấp nhận OAuth. Chi tiết về yêu cầu xác thực OpenID được minh họa như trong Hình 4.6.
Hình 4.6: Yêu cầu xác thực OpenID được gửi tới Google. Người dùng chọn thẻ
CardSpace phù hợp
https://www.google.com/accounts/o8/ud?openid.ns=http://specs.openid.net/auth /2.0&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&openi d.identity=http://specs.openid.net/auth/2.0/identifier_select&openid.return_to=ht tp://id.ming.vn/cardspace/authenIdP.php&openid.realm=http://id.ming.vn&openi d.mode=checkid_setup&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0&o penid.ns.ext1=http://openid.net/srv/ax/1.0&openid.ext1.mode=fetch_request&open id.ext1.type.email=http://axschema.org/contact/email&openid.ext1.type.first=http:/ /axschema.org/namePerson/first&openid.ext1.type.last=http://axschema.org/name Person/last&openid.ext1.type.country=http://axschema.org/contact/country/home &openid.ext1.type.lang=http://axschema.org/pref/language&openid.ext1.required= email,first,last,country,lang&openid.ns.oauth=http://specs.openid.net/extension s/oauth/1.0&openid.oauth.consumer=id.ming.vn&openid.oauth.scope=http:// www.google.com/m8/feeds/http://www.opensocial.googleusercontent.com/api/pe ople/
Extension ở đây là toà n bộ mã javascript được sử dụng để xử lý việc có hỗ trợ đăng nhập bằng thẻ CardSpace của sannhac.com, chặn mã SAML chứa thông tin của thẻ CardSpace và khởi tạo yêu cầu xác OpenID tới Google. Nội dung trong Hình 4.4 là một phần của Extension. Nhìn vào Hình 4.4 chúng ta sẽ thấy từ dòng 16 đến dòng 29 là Extension phân tích thông tin của thẻ CardSpace là lưu trữ tạm thời những thông tin này lại, còn dòng 30 là khởi tạo một xác thực OpenID tới Google.
Sau khi yêu cầu xác thực OpenID được gửi tới Google thì Google sẽ xác thực người dùng và hỏi người dùng có cấp quyền truy cập dữ liệu của RP (sannhac.com). Quá trình xác thực người dùng và xin quyền người dùng được thể hiện qua Hình 4.7.
Hình 4.7: Google xác thực người dùng
Sau khi Google xác thực người dùng thành công thì một mã SAML được gửi tới Sannhac.com. Mã SAML này bao gồm các thuộc tính của người dùng mà được cung cấp bởi Google và chữ ký số RSTR được SIIP phát ra. Hình 4.8 mình họa một phần thông tin của thẻ CardSpace trong mã SAML. Sannhac.com sẽ kiểm các thông tin trong mã SAML này. Nếu thông tin là hợp lệ thì Sannhac.com sẽ cho phép người dùng truy cập . Hình 4.9 là kết quả của việc sử dụng thẻ CardSpace đăng nhập vào Sannhac.com. oo le c th c n i d ng i d n qu n tru c p <saml:AttributeStatement> <saml:Attribute AttributeName="givenname" AttributeNamespace=http://schemas.xmlsoap.org/ws/2005/05/identity/claims> <saml:AttributeValue>truongtd217</saml:AttributeValue> </saml:Attribute> <saml:Attribute AttributeName="emailaddress" AttributeNamespace=http://schemas.xmlsoap.org/ws/2005/05/identity/claims> <saml:AttributeValue>truongtd217@gmail.com</saml:AttributeValue> </saml:Attribute>
Hình 4.8: Thông tin của thẻ CardSpace nằm trong mã SAML
Hình 4.9: Kết quả sử dụng CardSpace đăng nhập vào Sannhac.com