2012年2月28日 星期二

Facebook Authentication

至從去年Facebook將認證升級OAuth 2.0 protocol之後,所有支援Facebook的網站皆無法使用。一直要找時間改寫,但一直沒空,最近終於撥冗研究了一下新的Authentication Guide,才升級了系統認證。這份Guide因為是給技術人員使用,所以沒有中文版,另外就是在網路上查相關的技術報告,沒有中文網頁的搜尋結果(包含簡體),畢竟這是最新的技術資訊,等翻譯成中文或在市面上可以看到相關書籍,那已經變成過期資訊了。這就是資訊人員辛苦的地方,隨時都要走在科技的最前線。

我在改寫時遇到的問題是,一直出現OAuthException,錯誤訊息是「Error validating verification code.」,我在猜想是不是Request的方式不對,最後用程式去實驗,還出現不support的訊息。



我在網路上找相關的英文技術網站,但大部分都是AJAX與Java,而Guide的Example是PHP,難道都沒有人用ASP.NET嗎?倒是有C#的討論,但卻是用Facebook API,而我不打算用API,因為這樣又得花時間去閱讀API的Guide,最後只好自己慢慢研究。研究了一下午,發現問題點是redirect的網址不能帶參數,因為authenticated code會根據參數做編碼,而參數中使用的「%3F」和「%3D」會被MD5成「#」字元,而「#」之後的參數用request url method是讀不到的(但Java可以),所以step 2會被系統錯編,最後認證失敗。即使自己手動帶回去完整的code,但Facebook自己本身也有defect,也無法接受這樣的字元,所以無論如何都會認證失敗。



總之最後還是修正完成了,目前應用在i-Share,網站掛掉半年,終於修復完成!