GitHub 第三方登錄

images.png

現(xiàn)在很多站點(diǎn)都支持第三方登錄功能士飒。
作為一個(gè)技術(shù)博客,目標(biāo)受眾項(xiàng)是一批程序員,第三方登錄的就選中了github并级。
這篇文章注意是講一講如何給自己的博客添加github自動(dòng)登錄功能。

OAuth 2.0

說到第三方登錄侮腹,不得不提的一個(gè)知識(shí)點(diǎn)就是 oauth 2.0嘲碧。

OAuth(開放授權(quán))是一個(gè)開放標(biāo)準(zhǔn),允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片凯旋,視頻呀潭,聯(lián)系人列表)钉迷,而無(wú)需將用戶名和密碼提供給第三方應(yīng)用至非。 ---- 百度百科

這個(gè)協(xié)議在認(rèn)證和授權(quán)的時(shí)候涉及到:

  • 服務(wù)提供方,例如 GitHub糠聪,GitHub上儲(chǔ)存了用戶的登錄名荒椭,Email,昵稱舰蟆,頭像等信息
  • 用戶
  • 客戶端趣惠,例如我的博客就是一個(gè)客戶端,需要服務(wù)方向我提供用戶的一些基本信息

OAuth 協(xié)議的認(rèn)證和授權(quán)的過程如下:

  • 用戶打開我的博客后身害,我想要通過GitHub獲取改用戶的基本信息
  • 在轉(zhuǎn)跳到GitHub的授權(quán)頁(yè)面后味悄,用戶同意我獲取他的基本信息
  • 博客獲得GitHub提供的授權(quán)碼,使用該授權(quán)碼向GitHub申請(qǐng)一個(gè)令牌
  • GitHub對(duì)博客提供的授權(quán)碼進(jìn)行驗(yàn)證塌鸯,驗(yàn)證無(wú)誤后侍瑟,發(fā)放一個(gè)令牌給博客端
  • 博客端使用令牌,向GitHub獲取用戶信息
  • GitHub 確認(rèn)令牌無(wú)誤丙猬,返回給我基本的用戶信息

如何使用GitHub提供的 OAuth 服務(wù)

  • 打開 Setting > Developer setting > OAuth applications
  • 點(diǎn)擊 Register a new application
  • 填入基本的app信息
  • 創(chuàng)建成功涨颜,會(huì)有如下頁(yè)面
image

這里的各項(xiàng)配置具體的作用,我們還是看一看GitHub提供的文檔 OAuth GitHub Developer Guide

具體流程

  1. 轉(zhuǎn)跳到 GitHub 用戶授權(quán)頁(yè)面茧球, client_id 必須傳
    其他參數(shù)如果有需要就傳庭瑰,例如我這里需要獲取用戶的郵箱信息,就加了一個(gè) scope=user:email
    最終拼成的URL如下:
https://github.com/login/oauth/authorize?client_id=myclient_id&scope=user:email
  1. 當(dāng)用戶同意授權(quán)后抢埋,鏈接地址就會(huì)轉(zhuǎn)跳到 我們配置頁(yè)面內(nèi)的 Authorization callback URL 所填寫的URL地址弹灭,并且會(huì)帶上一個(gè) code參數(shù),這個(gè)參數(shù)在后面獲取用戶token是必須的一個(gè)參數(shù)揪垄。
    獲取到這個(gè)code參數(shù)后穷吮,我會(huì)將這個(gè)code傳到服務(wù)器的后臺(tái),然后后臺(tái)調(diào)用 https://github.com/login/oauth/access_token 這個(gè)api福侈,傳入 client_id, client_secret, code 這三個(gè)參數(shù)酒来,可以獲取到一個(gè) access_token

  2. 獲取到 access_token 后肪凛, 再調(diào)用 https://api.github.com/user?access_token=access_token 這個(gè)API堰汉,就可以獲取到基本的用戶信息了辽社。 用戶的基本信息內(nèi)容如下所示, 根據(jù)第一步傳入的不同的 scope翘鸭,獲取到的用戶信息也是不同的滴铅。博客后臺(tái)使用 login 字段作為用戶的唯一標(biāo)示,因?yàn)閑mail 可能為空就乓,之前用email發(fā)生了一些bug汉匙。

{
    "login": "Diamondtest",
    "id": 28478049,
    "avatar_url": "https://avatars0.githubusercontent.com/u/28478049?v=3",
    "gravatar_id": "",
    "url": "https://api.github.com/users/Diamondtest",
    "html_url": "https://github.com/Diamondtest",
    "followers_url": "https://api.github.com/users/Diamondtest/followers",
    "following_url": "https://api.github.com/users/Diamondtest/following{/other_user}",
    "gists_url": "https://api.github.com/users/Diamondtest/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/Diamondtest/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/Diamondtest/subscriptions",
    "organizations_url": "https://api.github.com/users/Diamondtest/orgs",
    "repos_url": "https://api.github.com/users/Diamondtest/repos",
    "events_url": "https://api.github.com/users/Diamondtest/events{/privacy}",
    "received_events_url": "https://api.github.com/users/Diamondtest/received_events",
    "type": "User",
    "site_admin": false,
    "name": null,
    "company": null,
    "blog": "",
    "location": null,
    "email": null,
    "hireable": null,
    "bio": null,
    "public_repos": 0,
    "public_gists": 0,
    "followers": 0,
    "following": 0,
    "created_at": "2017-05-06T08:08:09Z",
    "updated_at": "2017-05-06T08:16:22Z"
}

這樣,從獲取授權(quán)生蚁,到獲得用戶信息的流程就走完了噩翠。 再根據(jù)自己的需求進(jìn)行用戶信息儲(chǔ)存,自有登錄的接入邦投,用戶資料的管理伤锚。就完成了一套第三方登錄的方案。

目前市面上主流的協(xié)議就是 OAuth2.0志衣。 例如 QQ屯援,微信,微博等等念脯。 所以只要搞明白大概流程狞洋,那么接入其他供應(yīng)商的第三方登錄也是小菜一碟了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绿店,一起剝皮案震驚了整個(gè)濱河市吉懊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惯吕,老刑警劉巖惕它,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異废登,居然都是意外死亡淹魄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門堡距,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甲锡,“玉大人,你說我怎么就攤上這事羽戒$吐伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵易稠,是天一觀的道長(zhǎng)缸废。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么企量? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任测萎,我火速辦了婚禮,結(jié)果婚禮上届巩,老公的妹妹穿的比我還像新娘硅瞧。我一直安慰自己,他們只是感情好恕汇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布腕唧。 她就那樣靜靜地躺著,像睡著了一般瘾英。 火紅的嫁衣襯著肌膚如雪枣接。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天方咆,我揣著相機(jī)與錄音月腋,去河邊找鬼。 笑死瓣赂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的片拍。 我是一名探鬼主播煌集,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捌省!你這毒婦竟也來(lái)了苫纤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纲缓,失蹤者是張志新(化名)和其女友劉穎卷拘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祝高,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栗弟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了工闺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乍赫。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陆蟆,靈堂內(nèi)的尸體忽然破棺而出雷厂,到底是詐尸還是另有隱情,我是刑警寧澤叠殷,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布改鲫,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏像棘。R本人自食惡果不足惜纫塌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讲弄。 院中可真熱鬧措左,春花似錦、人聲如沸避除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓶摆。三九已至凉逛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間群井,已是汗流浹背状飞。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留书斜,地道東北人诬辈。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荐吉,于是被迫代替她去往敵國(guó)和親焙糟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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