Integrated ACS in Tomcat/Java Web Application

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/