MonkeyKing第三方授權(quán)登錄源碼分析

image.png

前言

關(guān)于MonkeyKing的使用可以參考前面的兩邊文章以及github地址
1什黑、MonkeyKing第三方分享
2、MonkeyKing第三方授權(quán)登錄
3堪夭、github地址


MonkeyKing的授權(quán)登錄以微信為例愕把,其他的第三方授權(quán)只要是基于OAuth拣凹,都是采用類似的方式進行。

一恨豁、授權(quán)過程

1嚣镜、在項目設(shè)置中設(shè)置微信的URL Schemes,不同的第三方使用的規(guī)則不同橘蜜,比如微信的schemes是使用的我們在微信第三方開發(fā)者帳號為自己應(yīng)用注冊的appId

設(shè)置微信schemes.png

2菊匿、在應(yīng)用啟動didFinishLaunchingWithOptions方法中注冊微信對應(yīng)的appId和appKey

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

3、發(fā)起微信授權(quán)

MonkeyKing.oauth(for: .weChat) { [weak self] (dictionary, response, error) in
            // dictionary包含的信息有 openid,unionid,refresh_token,scope,access_token,expires_in
     
        }

三计福、授權(quán)流程分析

1跌捆、URL Schemes的作用,其實就是從其他app跳轉(zhuǎn)到改應(yīng)用的入口棒搜,如果配置了該協(xié)議疹蛉,那么通過該協(xié)議就可以打開自己的應(yīng)用。比如配置的URL Schemes為MyApp那么通過手機的safari輸入MyApp://就會在瀏覽器中彈出是否打開本應(yīng)用的提示

image.png
image.png

同樣的力麸,只要清楚了這個原理可款,就很容易知道OAuth授權(quán)的流程

正常授權(quán)流程

1)應(yīng)用在第1步發(fā)起授權(quán),需要打開第三方應(yīng)用克蚂,如同自己的應(yīng)用設(shè)置scheme一樣闺鲸,如果第三方應(yīng)用沒有設(shè)置URL Scheme,那么應(yīng)用是無法發(fā)起授權(quán)的埃叭。如果手機沒有安裝對應(yīng)的應(yīng)用摸恍,MonkeyKing采用網(wǎng)頁的形式發(fā)起授權(quán)
常見的一些第三方應(yīng)用URL Scheme如下:參考文章

 QQ  mqq:// 
 微信  weixin://  
 騰訊微博    TencentWeibo://    
 淘寶  taobao://  
 支付寶     alipay://  
 微博  sinaweibo://

需要在應(yīng)用的info.plist文件中進行配置

image.png
微信發(fā)起授權(quán)方式

2)第2步可能是web授權(quán),也可能是網(wǎng)頁授權(quán)赤屋,也可能是第三方應(yīng)用打開web頁面授權(quán)立镶,不管怎么樣,都會有一個授權(quán)頁面类早,用戶點擊授權(quán)頁面確認按鈕之后媚媒,授權(quán)頁面,或者第三方應(yīng)用會根據(jù)配置的URLScheme或者其他規(guī)則跳轉(zhuǎn)到發(fā)起的應(yīng)用涩僻。比如微信授權(quán)都會為每一個應(yīng)用分配一個appId缭召,應(yīng)用需要將這個appId寫入到URL Schemes中。應(yīng)用發(fā)起微信授權(quán)成功后逆日,微信就會調(diào)用這個appId構(gòu)成的scheme嵌巷,并且附帶一些授權(quán)的參數(shù)打開發(fā)起授權(quán)的應(yīng)用。
比如微信授權(quán)成功之后室抽,會返回一個如下的url:

wx4868b35061f87885://oauth?code=003KLKZ32djWhL0RwHY32LmzZ32KLKZv&state=Weixinauth

用戶取消授權(quán) 會返回:

wx4868b35061f87885://platformId=wechat

3)4)5)授權(quán)成功后的url開頭就是我們配置的appId搪哪,code就是我們之后獲取微信授權(quán)需要的code。
在appdelegate中下面方法會攔截到這個url狠半,然后MonkeyKing對這個url進行處理

        func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        if MonkeyKing.handleOpenURL(url) {
            return true
        }
        return false
    }

攔截到url之后噩死,通過前綴和返回的內(nèi)容進行判斷颤难,如果是"wx",并且url中包含"state=Weixinauth"就認為是OAuth授權(quán),如果包含wapoauth就是網(wǎng)頁授權(quán)已维,包含"platformId=wechat"并且不包含state就是授權(quán)失敗

判斷微信Oauth授權(quán)行嗤,獲取code

拿到code之后,就可以發(fā)起獲取授權(quán)信息的請求了垛耳,最后將得到的授權(quán)信息回調(diào)栅屏,然后我們就可以通過json獲取到回掉信息,進行下一步處理

獲取授權(quán)信息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堂鲜,一起剝皮案震驚了整個濱河市栈雳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缔莲,老刑警劉巖哥纫,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痴奏,居然都是意外死亡蛀骇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門读拆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擅憔,“玉大人,你說我怎么就攤上這事檐晕∈钪睿” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵辟灰,是天一觀的道長个榕。 經(jīng)常有香客問我,道長芥喇,這世上最難降的妖魔是什么笛洛? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮乃坤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沟蔑。我一直安慰自己湿诊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布瘦材。 她就那樣靜靜地躺著厅须,像睡著了一般。 火紅的嫁衣襯著肌膚如雪食棕。 梳的紋絲不亂的頭發(fā)上朗和,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天错沽,我揣著相機與錄音,去河邊找鬼眶拉。 笑死千埃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忆植。 我是一名探鬼主播放可,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朝刊!你這毒婦竟也來了耀里?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤拾氓,失蹤者是張志新(化名)和其女友劉穎冯挎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咙鞍,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡房官,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奶陈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片易阳。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吃粒,靈堂內(nèi)的尸體忽然破棺而出潦俺,到底是詐尸還是另有隱情,我是刑警寧澤徐勃,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布事示,位于F島的核電站,受9級特大地震影響僻肖,放射性物質(zhì)發(fā)生泄漏肖爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一臀脏、第九天 我趴在偏房一處隱蔽的房頂上張望劝堪。 院中可真熱鬧,春花似錦揉稚、人聲如沸秒啦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽余境。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芳来,已是汗流浹背含末。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留即舌,地道東北人佣盒。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像侥涵,于是被迫代替她去往敵國和親沼撕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容