OAuth 2.0 - Authorization Code授权方式详解
I:OAuth 2.0 開發(fā)前期準(zhǔn)備
天上不會(huì)自然掉餡餅讓你輕松地去訪問到人家資源服務(wù)器里面的用戶數(shù)據(jù)資源,所以你需要做的前期開發(fā)準(zhǔn)備工作就是把AppKey, AppSecret取到手 新浪獲取傳送門,騰訊獲取傳送門
這里說一下,在申請(qǐng)AppKey和AppSecret的過程中,新浪和騰訊的申請(qǐng)做法是有區(qū)別的。
在新浪微博的AppKey,AppSecret申請(qǐng)時(shí)會(huì)驗(yàn)證你是否擁有域名的所有權(quán)
而騰訊在這一塊上面則沒有這個(gè)要求!
PS:申請(qǐng)成為開放平臺(tái)開發(fā)者時(shí)需要上傳身份證電子文件。。。。。
II:為什么不用官方提供的SDK
說到這個(gè)我就想吐槽了,這官方的SDK尼瑪?shù)拿黠@排斥堆擠咋們做.net的啊!~~~
先上新浪支持的SDK:
然后在上騰訊支持的SDK:
文檔資料不全不說,出了問題你還得找人家。所以在這里我也試想過轉(zhuǎn)戰(zhàn)JS SDK看看~于是又有了如下的悲劇事情發(fā)生:
騰訊和新浪的JS SDK都是主推用js彈窗方面的。這樣不太會(huì)電腦的用戶使用起來的話,就會(huì)覺得你的這個(gè)第三方應(yīng)用會(huì)不會(huì)是病毒神馬的。
IE9下彈窗提示
Chrome下也會(huì)提示,所以這個(gè)東西是瀏覽器本身機(jī)制的問題~所以在帖子里面也得到了準(zhǔn)確的答復(fù)。
稍微設(shè)置一下允許彈窗的話就得到上面這個(gè)怪異摸樣。。。
而在這里稍微說一下騰訊的OPENJS這個(gè)東西!!我個(gè)人感覺它想挑戰(zhàn)一下我們開發(fā)人員的智商。。。
這個(gè)為什么瀏覽器沒有阻止,完全是在同域的情況下啊~~~TX你這互聯(lián)老大連另外整個(gè)類似于新浪的獨(dú)立域名的工作都沒做好啊!!還在自家的API文檔站上高亮標(biāo)示起這個(gè)OpenJS新秀呀。
?
不過相比新浪的JS SDK騰訊自家的OpenJS的技術(shù)支持做得非常好的。你只要碰到了問題。都有人在線幫你解答。
PS:如果你選用JS SDK的話,那么你的業(yè)務(wù)邏輯將會(huì)以js腳本的形式暴露在客戶端瀏覽器之下。
III:Authorization Code驗(yàn)證授權(quán)模式
基礎(chǔ)知識(shí):
在這里先引用前一篇文章里的示例用圖,然后再接著講解各個(gè)部分的相關(guān)知識(shí)。
1.Resource Server(資源服務(wù)器):負(fù)責(zé)存放服務(wù)提供商的用戶數(shù)據(jù)資源等相關(guān)信息。當(dāng)?shù)谌綉?yīng)用訪問這個(gè)資源服務(wù)器時(shí),需要提供Access Token否則會(huì)提示訪問失敗。所以我們最終的目的就是讓自己開發(fā)的第三方Web應(yīng)用順利地訪問到服務(wù)提供商的資源服務(wù)器,這才是這個(gè)系列文章的最終目的。
2.Authorization Server(驗(yàn)證授權(quán)服務(wù)器):負(fù)責(zé)驗(yàn)證用戶賬戶名密碼,以及給第三方WEB應(yīng)用發(fā)放Access Token。在這里我上傳兩張圖片為你敘述Authorization Server是什么樣子。
新浪的Authorization Server
騰訊的Authorization Server
接下來將會(huì)繼續(xù)講解,這個(gè)重要的Access Token(訪問令牌)到底是怎么取得的。
首先作為第三方網(wǎng)站上會(huì)顯示一個(gè)跳轉(zhuǎn)到新浪,騰訊授權(quán)服務(wù)器的<a />超級(jí)鏈接。如下圖:
下面的圖片將介紹這兩個(gè)鏈接的跳轉(zhuǎn)地址規(guī)范:
新浪的規(guī)范
https://api.weibo.com/oauth2/authorize?client_id={AppKey}&response_type=code&redirect_uri={YourSiteUrl}
騰訊的規(guī)范
https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id={AppKey}&response_type=code&redirect_uri={YourSiteUrl}
可以看出新浪和騰訊的規(guī)范在此步驟基本一致。
現(xiàn)在講述第2步:
這時(shí)Authorization Server將會(huì)跳轉(zhuǎn)回申請(qǐng)授權(quán)驗(yàn)證的第三方網(wǎng)站~但是會(huì)在QueryString內(nèi)加上一個(gè)名為code的參數(shù)!例子如下:
騰訊:http://www.mytestsite.com/Tencent.aspx?code=174256357036c9df7db17342f15a9476&openid=45CD8A7A05A0C3E30D8A9AB74EEAA8D1&openkey=98B2964245A2BE2830F7A793E09FE6B0
新浪:http://www.mytestsite.com/Sina.aspx?code=19b83321705c538e0422ba09ac9043a0
從這一步可以看出企鵝與標(biāo)準(zhǔn)脫離的野心逐漸浮現(xiàn)。。。它不僅僅返回code而且還參雜openid&openkey~不知在各位開發(fā)者的眼里會(huì)不會(huì)覺得比較另類?
當(dāng)我們拿到跳轉(zhuǎn)回來Url上的QueryString參數(shù)code后就可以再次去Authorization Server上請(qǐng)求獲取AccessToken這個(gè)重要令牌了!下面接著上圖!!!
具體說一下第3步的請(qǐng)求地址規(guī)范:
新浪:https://api.weibo.com/oauth2/access_token?client_id={AppKey}&client_secret={AppSecret}&grant_type=authorization_code&redirect_uri={YourSiteUrl}&code={code}
騰訊:https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id={AppKey}&client_secret={AppSecret}&redirect_uri={YourSiteUrl}&grant_type=authorization_code&code={code}
在這一步,騰訊和新浪雙方都完全保持一致,非常慶幸!
第4步,重點(diǎn)來了,授權(quán)服務(wù)器即將返回Access Token。這是以Response Body的方式,所以說Authorization Code授權(quán)方式并沒有對(duì)客戶端暴露AccessToken訪問令牌。也是我極力推薦使用的一種授權(quán)方式。
上圖是新浪返回Access Token的內(nèi)容
上圖是騰訊返回Access Token的內(nèi)容
這里需要注意一下第3,4步必須要以http post的方式去發(fā)起Request。~
IV:總結(jié)
下一篇將會(huì)講解如何訪問資源服務(wù)器!盡請(qǐng)期待吧!
本文到此結(jié)束!謝謝。
廣告:OAuth2.0 組件討論群:108441512?詢問C#以外的OAuth 2.0 sdk同學(xué)勿入!謝謝合作。
轉(zhuǎn)載于:https://www.cnblogs.com/highend/archive/2012/07/06/oautn2_authorization_code.html
總結(jié)
以上是生活随笔為你收集整理的OAuth 2.0 - Authorization Code授权方式详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2012年7月份第4周51Aspx源码发
- 下一篇: WCF错误“验证消息的安全性时发生错误”