OAuth2.0:
一種安全的登陸協(xié)議野建,用戶的賬戶密碼不提交到本APP,而是提交到授權(quán)服務(wù)器,待服務(wù)器確認后谊囚,返回本APP一個訪問令牌怕享,本APP即可用該訪問令牌訪問資源服務(wù)器的資源。由于用戶的賬號密碼并不與本APP直接交互秒啦,而是與官方服務(wù)器交互熬粗,因而它是安全的。
例如:地下城就是你的游戲余境,第三方應(yīng)用驻呐,QQ平臺就是你的家。想讓第三方應(yīng)用去你的家里做一些事芳来。你可以復(fù)制給他們一把鑰匙(用戶名和密碼)含末,我們要注意三個問題:
- 別人拿了鑰匙后可以去你家里任何地方
- 別人拿到你家的鑰匙后也許會不小心丟到,甚至故意送到其他人手里即舌。如何保證家的安全性佣盒?
- 一段時間后,你不想別人擁有你的鑰匙了顽聂,如何回收肥惭?
OAuth 是高級鑰匙:
- 可以配置不同權(quán)限的鑰匙串。有些只能進客廳(讀取你的QQ昵稱)紊搪。有些鑰匙可以進臥室(讀取QQ頭像)
- 鑰匙上帶著指紋驗證的(指紋 = appkey)蜜葱。 收到鑰匙的人只能自己用,不能轉(zhuǎn)讓
- 遠程廢除之前發(fā)出的鑰匙相對來說, OAuth比給出用戶名密碼安全
流程:
1耀石、獲取未授權(quán)的Request Token牵囤。
url:request token url。
param:appKey/appSecret滞伟,簽名方法/簽名(如HMAC-SHA1)揭鳞,timeStamp(時間戳:距1970/0/0/0/0/0的秒數(shù)),nonce(隨機生成的string梆奈,防止重復(fù)請求)
response:Oauth_Token/Oauth_Secret
2野崇、獲取用戶授權(quán)的Request Token。
url:user authorizition url亩钟。
param:Oauth_Token(上個步驟返回的令牌)舞骆,callback_url(授權(quán)成功后返回的地址)
response:Oauth_Token(被用戶授權(quán)或否決的令牌)
3、用已授權(quán)的Request Token換取AccessToken径荔。
url:access token url督禽。
param:appKey,Oauth_Token(上個步驟返回的令牌)总处,簽名狈惫,TimeStamp,nonce
response:Access_Token/Secret
二、SSO授權(quán)技術(shù)
全稱:Single Sign On胧谈,用戶只需登陸一次即可訪問相互信任的子系統(tǒng)忆肾。用戶訪問系統(tǒng)1時,登陸成功后會返回一個ticket菱肖,當(dāng)用戶訪問系統(tǒng)2時客冈,會把ticket帶上,待驗證合法后即可訪問系統(tǒng)2稳强。聽起來跟cookie有點像场仲,沒錯,Web-SSO便有基于cookie的實現(xiàn)方案退疫。
以新浪微博為例渠缕,很多手機APP在點擊新浪授權(quán)時,會跳到新浪客戶端的登陸頁面褒繁,這里就用到SSO技術(shù)啦亦鳞。在本APP授權(quán)新浪微博時,會先檢測手機是否安裝了新浪微博客戶端棒坏。
[[UIApplication sharedApplication] openURL:xxx]
可以打開另一個APP
這里sinaweibosso://login為客戶端的url并傳遞三個參數(shù)燕差,AppKey,RedirectURI坝冕,ssoCallbackScheme徒探。
ssoCallbackScheme是返回的App Url地址,即自己定義的sinaweibosso.appKey徽诲。
登陸成功后,客戶端會直接把AccessToken返回給本App吵血,就完成了一次授權(quán)谎替。