Thursday, July 29, 2010

Windows LiveID Web Authentication 導入

先前介紹了Yahoo OpenID與Google OpenID的導入,原本想說Windows Live也要試OpenID的導入,不過在google上找了半天,試了很久才發現微軟公布的OpenID頁面根本是無用的,只好放棄這個念頭。

繼續找了下去,發現到有個叫做Windows Live Messenger Connect的東西,研究了很久,才發現這個東西雖然功能很不錯,卻沒辦法簡單的取得使用者識別,花了很多功夫後只好先丟在一旁,有空再回來玩。

最後找到了這個Windows Live ID Web Authentication,這不是很新的東西了,不像是Messenger Connect還在Beta中,需要申請後等個一兩周才能玩到,研究了一下,發現可以很簡單的識別出使用者,於是決定就用這個了。



要使用Windows Live ID Web Authentication,你必須先去微軟的雲端平台Azure申請一個Live Services,申請的過程很簡單,登入後選Live Services再點右上方的New Service。


WLAuth_01
沒付錢的Azure似乎只能創20個Live Service,不過這早就夠用了,選擇Live Services: Existing APIs後會跳到填資料的頁面。


WLAuth_02
要填的資料相當簡單,名稱、敘述、網域、回傳網址填完後,就可以看到你這個Service的資訊了,裡面重要的是Application ID跟Secret Key是之後會用到的。


接下來就下載Windows Live ID Web Authentication SDK 1.2,下載下來的會是webauth-cs-1.2.msi這個東西,隨便找個地方安裝後,你會看到裡面有兩個檔案跟兩個資料夾。

使用上很簡單,你可以直接看微軟的說明或是看我介紹也可(其實是一樣的)。


1.把App_Code\的WindowsLiveLogin.cs複製到你的App_Code\內
2.把Sample\內除了web.config外的檔案都複製到你要測試的目錄內
3.在你的web.config內的<appSettings></appSettings>內加入下面三行
<add key="wll_appid" value="00163FFF80003301"/>
<add key="wll_secret" value="ApplicationKey123"/>
<add key="wll_securityalgorithm" value="wsignin1.0"/>
wll_appid跟wll_secret請填入你在Azure上申請Live Service的值。
4.將Azure上Live Service的Return URL設成http://yourlink/webauth-handler.aspx

如果你的檔案名稱都沒改的話,理論上這樣設定就可以跑了。


稍微解釋一下這個範例的流程,在default.aspx內有個iframe嵌入了windows live的登入畫面,登入後若成功的話,系統會以post的方式將資訊丟到你設定的return url,在這邊webauth-handler.aspx會針對login/logout等動作去對你設定的cookie(預設叫webauthtoken)做動作,然後頁面會導至webauth-handler.aspx裡設定的loginpage去。

在loginpage(預設為default.aspx)中,會去檢查有沒有cookie,若cookie中已寫入了使用者登入的資訊,則可以參照範例中的方式取得user.id為使用者唯一識別值,這個看起來像是MD5後的值,就是本篇文章所要得到的東西,所以本文也到此結束了,感謝。

2 comments:

  1. 請問可以用 Windows Live ID Web Authentication 得到用戶的EMAIL帳號嗎?

    ReplyDelete
  2. 很久沒碰都忘了,不過我剛剛看了一下文件,似乎沒看到有用戶的email帳號這欄位,所以乍看之下是不行的。

    ReplyDelete