Windows Azure SDK for Java 1.7添加了一個Windows Azure Access Control Filter功能,透過這個Library的協助,我們現在可以輕易地在Java Web Application
中結合ACS及Windows Live或是Facebook等Identity Providers來進行使用者驗證的工作,本文以Step by Step方式引導讀者完成這個工作。
文/黃忠成
Windows Azure SDK for Java 1.7添加了一個Windows Azure Access Control Filter功能,透過這個Library的協助,我們現在可以輕易地在Java Web Application
中結合ACS及Windows Live或是Facebook等Identity Providers來進行使用者驗證的工作,本文以Step by Step方式引導讀者完成這個工作。
在建立好新的ACS Namespace後,首先新增一個信賴者憑證應用程式。
圖1
注意三個地方,名稱可以自由取,登入頁面會顯示這裡所鍵入的名稱,領域部分最好鍵入你的網址,傳回URL則是希望結合ACS進行使用者驗證
的網址及網頁,當驗證完成後,Token會傳回此網頁中。
圖2
接著切換到憑證與金鑰頁面,刪除預設產生的X.509憑證,讓畫面變成下面這樣。
圖3
在最上方按下新增,進入上傳新憑證的畫面。
圖4
如果沒有現成的憑證可用的話,可以照著此網頁上的說明,透過Windows SDK所提供的makecert.exe來產生一個,然後透過certmgr.msc匯出.pfx(包含私密金鑰的版本),及一個未包含私密金鑰的版本(.cer)。
圖5
然後將.pfx透過圖4的網頁上傳到ACS。
接著透過Eclipse來建立一個Dynamic Web Project,選擇Tomcat,進入Build Path|Add Library頁面加入Windows Azure Access Control Server Filter。
圖6
圖7
此處的ACS Authentication Endpoint來自於以下網頁。
圖8
接著在圖7的頁面中的Relay Party Realm輸入於信賴者憑證應用程式中的領域設定,最後選取未包含私密金鑰的版本(.cer)後按下OK。
一切都正常後,於WebContent下新增一個index.jsp,然後執行,一開始會被導往Windows Live的登入頁面(這是ACS預設的Identity Providers)。
圖9
通過驗證後,才能進入index.jsp。
圖10
在使用者通過驗證後,ACS會把SAML Token傳到index.jsp中,我們的程式只要透過request.getAttribute("ACSSAML");就能取到這個Token。
<%@pagelanguage="java"contentType="text/html; charset=BIG5" pageEncoding="BIG5"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=BIG5"> <title>Insert title here</title> </head> <body> <%=request.getAttribute("ACSSAML").toString() %> </body> </html> |
圖11
如果需要進一步解譯SAML,可參考以下網址。
http://www.windowsazure.com/en-us/develop/java/how-to-guides/view-saml-returned-by-acs/