一.建立統(tǒng)一的用戶(hù)授權(quán)中心
統(tǒng)一的用戶(hù)授權(quán)中心主要包含兩塊的功能:
1馏谨,Authentication(認(rèn)證)
2附迷,Authorization(鑒權(quán))
認(rèn)證關(guān)心你是誰(shuí)惧互,鑒權(quán)關(guān)心你能干什么挟秤。
認(rèn)證的作用在于認(rèn)可你有權(quán)限訪問(wèn)系統(tǒng),用于鑒別訪問(wèn)者是否是合法用戶(hù)艘刚;而授權(quán)用于決定你有訪問(wèn)哪些資源的權(quán)限管宵。
Authorization Server/Identity Provider(IdP) VS Service Provider(SP)/Resource Server
把負(fù)責(zé)認(rèn)證的服務(wù)稱(chēng)為 Authorization Server 或者 Identity Provider,以下簡(jiǎn)稱(chēng) IdP箩朴;而負(fù)責(zé)提供資源(API調(diào)用)的服務(wù)稱(chēng)為 Resource Server 或者 Service Provider,以下簡(jiǎn)稱(chēng) SP
為了實(shí)現(xiàn)統(tǒng)一的用戶(hù)授權(quán)中炸庞,可以采用OAuth 2和JWT(JSON Web Tokens)技術(shù)作為解決方案。
什么是Token
token 即使是在計(jì)算機(jī)領(lǐng)域中也有不同的定義埠居,這里我們說(shuō)的token,是指 訪問(wèn)資源的憑據(jù) 滥壕。例如當(dāng)你調(diào)用Google API纸颜,需要帶上有效 token 來(lái)表明你請(qǐng)求的合法性绎橘。這個(gè) token 是 Google 給你的,這代表 Google 給你的授權(quán)使得你有能力訪問(wèn) API 背后的資源称鳞。
請(qǐng)求 API 時(shí)攜帶 token 的方式也有很多種,通過(guò) HTTP Header 或者 url 參數(shù)冈止。
什么是OAuth 2.0
從獲取 token 到使用 token 訪問(wèn)接口。這其實(shí)是標(biāo)準(zhǔn)的 OAuth 2.0 機(jī)制下訪問(wèn) API 的流程靶瘸。這一節(jié)我們聊一聊 OAuth 里外相關(guān)的概念,更深入的理解 token 的作用怨咪。
用戶(hù)通過(guò)客戶(hù)端(可以是瀏覽器也可以是手機(jī)應(yīng)用)想要訪問(wèn) SP 上的資源,但是 SP 告訴用戶(hù)需要進(jìn)行認(rèn)證诗眨,將用戶(hù)重定向至 IdP
IdP 向用戶(hù)詢(xún)問(wèn) SP 是否可以訪問(wèn)用戶(hù)信息唉匾,如果用戶(hù)同意匠楚,IdP 向客戶(hù)端返回 access code
客戶(hù)端拿 code 向 IdP 換 access token,并拿著 access token 向 SP 請(qǐng)求資源
SP 接受到請(qǐng)求之后拿著附帶 token 向 IdP 驗(yàn)證用戶(hù)的身份
OAuth 的本意是一個(gè)應(yīng)用允許另一個(gè)應(yīng)用在用戶(hù)授權(quán)的情況下訪問(wèn)自己的數(shù)據(jù),OAuth 的設(shè)計(jì)本意更傾向于授權(quán)而非認(rèn)證(當(dāng)然授權(quán)用戶(hù)信息就間接實(shí)現(xiàn)了認(rèn)證) , 比如微信芋簿、QQ登錄同時(shí)支持授權(quán)和認(rèn)證峡懈。所以你在使用 微信 或者 QQ 賬號(hào)登陸第三方站點(diǎn)時(shí)与斤,會(huì)出授權(quán)對(duì)話框告訴你第三方站點(diǎn)可以訪問(wèn)你的哪些信息荚恶,需要征得你的同意: