微博是個大金礦,使用VS2010編譯QOAuth支持微博通用認證OAuth實現SINA微博登陸
隨著Twitter的興起和國內Sina和QQ等公司的追隨,微博現在是如日中天,將傳統的SNS給完全比拼下去,微博對于大家來說完全是個尚未完全開采的大金礦,對于一直站在潮流最前端的程序員來說怎么能將這么好的機會錯失呢。
在這里我拋磚引玉,先介紹下如何在Qt平臺上編譯QAuth來支持現在微博的通用認證OAuth,
根據Twitter的API Wiki,基本的OAuth驗證workflow如下:
1. 程序利用http://api.twitter.com/oauth/request_token來從twitter.com那里獲取一個request token。
2. 然后程序引導用戶到http://api.twitter.com/oauth/authorize頁面。
3. 用戶如果同意授權,twitter.com則會顯示一個7位數字的PIN碼。
4. 用戶需要將PIN碼復制,然后回到程序那里。
5. 之后程序要提示用戶輸入得到的PIN碼。
6. 然后程序將PIN碼作為參數oauth_verifier的值,接著調用http://api.twitter.com/oauth/access_token去核實PIN碼,從而將request_token 換成access_token。
7. Twitter之后會返回一個access_token,程序就此token來生成之后的OAuth簽名。
OAuth本身不是很復雜,不過如果有個庫可以作為驗證的helper的話,就可以省事很多了,由于最近一直在用Qt做開發,在上篇文章中我介紹了Qt并介紹了如何在VS2010中編譯Qt環境,如果對Qt不熟悉的朋友可以點這里查看。順理成章的是我希望在Qt框架下找到一個能支持OAuth的類庫來簡化開發,通過放狗進行搜索,搜到有個QOAuth的東西,是在Qt下的OAuth庫,不過仔細一看,原來在使用QOauth之前還需要OpenssL,QCA和QCA的OpenssL插件,暈啊!
閑話就不說了,咱們進入正題
- openssL
首先得到OpenssL的官網上下載OpenssL,http://www.openssl.org/,我下載的是openssl-1.0.0c.tar.gz,也是最新的,如果大家不想編譯也可以到網上搜索別人編譯好的庫。
下載好后解壓縮到硬盤中,我的路徑是 H:\openssl-1.0.0c,由于OpenssL使用Perl生成makefile,所以需要先下載Perl,我下載的ActivePerl,下載好后進行安裝。
Perl安裝好后,運行Visual Studio Command Prompt (2010),不要運行普通的控制臺。
鍵入命令 perl Configure VC-WIN32
如果輸入錯誤會有明顯提示,需要注意的是VC-W32必須是大寫
等完成后鍵入命令 ms\do_ms
等完成后輸入 nmake -f ms\ntdll.mak
編譯成功后生成的lib,dll等庫文件在out32dll中,頭文件在include中,這些目錄在以后的編譯中需要加入到項目頭文件目錄和lib包含目錄中。
- 編譯支持OpenssL的Qt
由于默認情況下Qt編譯出來時不支持OpenssL的,需要重新編譯下Qt,囧。
基本步驟和我這篇文章 Qt簡介以及如何配置Qt使用VS2010進行開發 中所描述的基本一致,唯一不同的在于configure的時候需要加上-openssl -I openssL頭文件目錄 -L openssLlib文件目錄,如我的環境下是這樣子滴
configure -platform win32-msvc2010 -openssl -I H:\openssl-1.0.0c\include -L H:\openssl-1.0.0c\out32dll
- QCA
QCA需要到這個網站http://delta.affinix.com/qca/下載,同樣的這個網站提供的QCA的OpenssL插件下載
QCA我下載的 qca-2.0.3.tar.bz2
QCA的OpenssL插件我下載的是 qca-ossl-2.0.0-beta3.tar.bz2
下載好后解壓縮到硬盤,我的路徑是 H:\qca-2.0.3,打開系統的環境變量,將QTDIR加入系統環境變量,如圖所示
打開VS2010,Qt菜單(如果沒有這個菜單,請查看我的上一篇文章),Open Qt Project File(.pro),選擇QCA的安裝目錄下的qca.pro,稍等一會兒,自動將PRO項目轉換成VS2010項目并加載了QCA下的所有項目
工程下有很多項目,我們只要編譯qca項目即可,直接編譯會出錯,需要進行下設置,展開qca項目,在Generated Files下的debug和release目錄下找到qpipe.moc文件,右鍵屬性,顯示下圖界面
在Command Line的最后面加上-DQ_OS_WIN,確定后,再編譯,OK一切都安靜了
- QCA的Openssl插件
下載好后解壓縮到硬盤,在Visual Studio Command Prompt (2010)中進入壓縮目錄,我的是在H:\qca-ossl-2.0.0-beta3,執行下面命令: configwin rd
新建一個文本文件,輸入WINLOCAL_PREFIX = C:/local,C:/Local可以是任何你想指定的目錄,這個目錄是作為零時文件的存放路徑,將其保存到你的Qt目錄下的mkspecs\features目錄中,文件名為winlocal.prf,注意不要保存成文本文件,我的保存路徑是H:\Qt\2010.05\qt\mkspecs\features,供大家參考。
打開VS2010,Qt菜單(如果沒有這個菜單,請查看我的上一篇文章),Open Qt Project File(.pro),選擇QCA的OpenSSL插件的的安裝目錄下的qca-ossl.pro,稍等一會兒生成了QCA的OpenSSL插件的VS項目。
將OpenssL的頭文件路徑和lib文件路徑添加到項目中
在項目中搜索所有的EVP_md2,一共有4個,加上宏定義#ifndef OPENSSL_NO_MD2#endif,如圖示,
編譯之,在lib文件夾中獲取勞動成果dll和lib文件兩顆,拷貝進Qt的Plugins的crypto中,如果沒有這個目錄,手動建立目錄。在以后編譯的項目中需要將這個目錄拷貝到exe文件的目錄中即可。
- QOAuth
從QOAuth的官方網站https://github.com/ayoy/qoauth下載QOAuth,
在硬盤解壓縮,我的目錄是H:\ayoy-qoauth-18dbc19,通用的打開VS2010,Qt菜單(如果沒有這個菜單,請查看我的上一篇文章),Open Qt Project File(.pro),選擇QOAuth目錄下的qoauth.pro,稍等片刻生成項目文件,在qoauth項目中的interface.h文件中點擊右鍵,屬性,如下圖所示
將.\GeneratedFiles\$(ConfigurationName)\加入到include目錄中,
編譯qoauth項目,成功后在lib文件中找到dll和lib,
編譯好之后得安裝。具體做法是: 將oauth.prf復制到QTDIR\mkspecs\features里面, 將include和src復制到QTDIR\include里面,src里面只需有頭文件即可 將生成的dll復制到QTDIR\lib,如果編譯時候提示找不到這兩個dll,可能是因為這是的dll名字包含版本號,去掉就ok了。
用了QOAuth之后,編譯出來的程序需要 +OpenSSL的鏈接庫:(如果不帶上OpenSSL的話,程序仍然可以啟動,QCA會顯示插件不支持的,然后會中止程序,算是個小陷阱) -libeay32.dll,libssl32.dll,ssleay32.dll +QCA的鏈接庫: -qcad2.dll +QOAuth的鏈接庫 -qoauth1.dll/qoauthd1.dll。