在上一篇文章《華為帳號(hào)服務(wù)學(xué)習(xí)筆記(一):什么是HMS拔稳,什么是華為帳號(hào)服務(wù)》中已經(jīng)給大家整理了一下華為帳號(hào)服務(wù)的使用場景和優(yōu)勢聘鳞,接下來我就將帶大家進(jìn)一步了解華為帳號(hào)服務(wù)涉及的一些基礎(chǔ)知識(shí)薄辅、接入方法、效率提升工具等抠璃。大家有什么疑問也可以隨時(shí)在評(píng)論區(qū)提站楚。
要了解華為帳號(hào)服務(wù),首先我們需要熟悉2個(gè)協(xié)議:Oauth2.0和OpenID Connect協(xié)議搏嗡,因?yàn)槿A為帳號(hào)的登錄方式就是基于這兩個(gè)協(xié)議來的窿春,不僅僅是華為帳號(hào)拉一,微信及其他廠商的帳號(hào)也基本基于這兩個(gè)協(xié)議。本文先介紹Oauth2.0旧乞。
一蔚润、一個(gè)有趣的問題
在回答什么是OAuth2.0前,我先拋出一個(gè)問題:
我們知道用戶可以通過帳號(hào)+密碼的方式獲取自己華為或者微信帳號(hào)的詳細(xì)信息尺栖,如用戶名嫡纠、郵箱、手機(jī)號(hào)等延赌,但第三方App除盏,比如下面這款app狂野飆車,用戶使用了華為帳號(hào)登錄后挫以,這款app就獲得了用戶的華為帳號(hào)信息者蠕,那么它是怎么獲得這些信息的呢?
要回答上面這個(gè)問題掐松,需要引入一個(gè)概念:代理授權(quán)踱侣;代理授權(quán)是一種允許第三方應(yīng)用訪問用戶數(shù)據(jù)的方法。有兩種方式:
1甩栈、用戶的帳號(hào)密碼提供給第三方應(yīng)用泻仙,以便它們可以代表你來登陸帳號(hào)并且訪問數(shù)據(jù);
2量没、通過 OAuth 授權(quán)第三方應(yīng)用訪問用戶的數(shù)據(jù)玉转,而無需提供密碼;
第一種方式相信沒有用戶會(huì)接受殴蹄,沒有哪個(gè)用戶愿意把自己的用戶名和密碼暴露給其他人究抓。第二種方式就使用到OAuth協(xié)議了,它不需要提供用戶的密碼給第三方袭灯,第三方也能獲取到需要的數(shù)據(jù)刺下,這也是為什么我們需要OAuth的原因。
二稽荧、究竟什么是OAuth2.0橘茉?
OAuth 2.0?是目前最流行的授權(quán)機(jī)制,用來授權(quán)第三方應(yīng)用姨丈,獲取用戶數(shù)據(jù)畅卓。有了OAuth2.0以后,之前的問題就能這樣解決:用戶對(duì)第三方應(yīng)用進(jìn)行有限授權(quán)蟋恬,第三方應(yīng)用通過這個(gè)有限授權(quán)就能到對(duì)應(yīng)帳號(hào)服務(wù)器去獲取授權(quán)過的信息翁潘。
OAuth2.0的設(shè)計(jì)思想:
之前看到過這樣一個(gè)比喻,我覺得能非常形象的說明OAuth2.0的設(shè)計(jì)思想歼争,現(xiàn)在就拿過來用一下拜马,方便大家快速理解渗勘。
快遞員與小區(qū)門禁系統(tǒng):
1、每個(gè)小區(qū)都有門禁系統(tǒng)俩莽,輸入密碼可進(jìn)入小區(qū)旺坠,只有業(yè)主知道密碼
2、快遞員經(jīng)常進(jìn)入小區(qū)送快遞豹绪,快遞員有幾種方式進(jìn)入小區(qū):
???? A价淌、業(yè)主告訴快遞員門禁密碼申眼,快遞員通過輸入密碼進(jìn)入
???? B瞒津、業(yè)主遠(yuǎn)程為快遞員開門
???? C、為快遞員開辟一條新通道括尸,只用于送快遞到指定地點(diǎn):
????? ——》在門禁系統(tǒng)中增加“請(qǐng)求授權(quán)”按鍵
????? ——》快遞員按下按鈕請(qǐng)求業(yè)主授權(quán)進(jìn)入
????? ——》業(yè)主同意授權(quán)后給快遞員返回一個(gè)“有限密碼”
? ? ? ——》快遞員通過輸入這個(gè)密碼巷蚪,可以進(jìn)入到小區(qū)投遞快遞的地點(diǎn),但不能進(jìn)入其他地方濒翻。
前兩種方式都不是最優(yōu)的屁柏,首先小區(qū)密碼擁有很多權(quán)限,給快遞員非常不安全有送;其次淌喻,小區(qū)可能有很多門,快遞員每通過一個(gè)門業(yè)主就需要遠(yuǎn)程為他開一次門也很煩雀摘;第C種方式是最優(yōu)的裸删,它的設(shè)計(jì)思想用于互聯(lián)網(wǎng)就是OAuth2.0了。
OAuth2.0協(xié)議的相關(guān)術(shù)語
資源所有者(Resource Owner):擁有客戶端應(yīng)用程序想要訪問的數(shù)據(jù)的用戶阵赠。
客戶端(Client):想要訪問用戶數(shù)據(jù)的的應(yīng)用程序
授權(quán)服務(wù)端(Authorization
Server):通過用戶許可涯塔,授權(quán)客戶端訪問用戶數(shù)據(jù)的授權(quán)服務(wù)端。
資源服務(wù)端(Resource Server):存儲(chǔ)客戶端要訪問的數(shù)據(jù)的系統(tǒng)清蚀。在某些情況下匕荸,資源服務(wù)端和授權(quán)服務(wù)端是同一個(gè)服務(wù)端。
訪問令牌(Access Token):訪問令牌是客戶端可用于訪問資源服務(wù)端上用戶授權(quán)的數(shù)據(jù)的唯一密鑰枷邪。
Scope:授權(quán)范圍榛搔,用于限制應(yīng)用程序訪問用戶的哪些數(shù)據(jù)
OAuth2.0協(xié)議的基本流程
?
Access Token與密碼的異同:
1、Access Token與密碼一樣东揣,是獲取用戶數(shù)據(jù)的憑證践惑,泄漏AT與泄漏密碼后果一樣
2、Access Token是短期的救斑,到期自動(dòng)失效童本,用戶無法修改;密碼一般是長期有效脸候,不修改不會(huì)變化
3穷娱、Access Token可以被數(shù)據(jù)所有者撤銷绑蔫,撤銷后會(huì)立即生效,而密碼一般不允許被人撤銷
4泵额、Access Token有權(quán)限范圍即Scope配深,可以指定持有人只能做什么事情,而持有密碼的人擁有的是完整權(quán)限嫁盲,可以做所有的事情
Access Token的設(shè)計(jì)可以讓第三方應(yīng)用獲得相應(yīng)權(quán)限篓叶,又隨時(shí)可控,不會(huì)危及系統(tǒng)安全羞秤。
OAuth 2.0的四種方式
?這里主要介紹第一種缸托。
1、授權(quán)碼(authorization-code)
指客戶端先獲取一個(gè)授權(quán)碼(Code)瘾蛋,再用授權(quán)碼換取Access
Token俐镐;
使用場景:客戶端有自己的后臺(tái)服務(wù)器
特點(diǎn):授權(quán)碼通過前端傳遞,而AT存儲(chǔ)在后臺(tái)服務(wù)器哺哼,通過后臺(tái)服務(wù)器與資源和授權(quán)服務(wù)器完成交互佩抹,前后端分離,非常安全
2取董、隱藏式
使用場景:純前端應(yīng)用棍苹,沒有后臺(tái)服務(wù)器
特點(diǎn):沒有授權(quán)碼,直接給前端頒發(fā)AT茵汰,AT存儲(chǔ)在前端枢里,不是很安全,適用于安全要求不高的場景
3经窖、密碼式
使用場景:高度信任某應(yīng)用坡垫,并且無法采用其他授權(quán)方式的情況
特點(diǎn):用戶直接將用戶名和密碼告訴第三方應(yīng)用,第三方應(yīng)用使用你的密碼去申請(qǐng)令牌
4画侣、憑證式
使用場景:沒有前端的命令行應(yīng)用
特點(diǎn):在命令行下請(qǐng)求令牌冰悠,直接信任第三方
Access Token過期問題
AT是有期限的,AT過期后就需要重新獲取配乱。
兩種方式:
1溉卓、按照之前的流程重新獲取一遍AT,這種體驗(yàn)不好搬泥;
2桑寨、OAuth2.0給出的方式是:在返回Access
Token的同時(shí)返回一個(gè)Refresh Token,當(dāng)AT(Access Token)過期以后忿檩,可以用RT(Refresh Token)去重新獲取AT尉尾。
以上就是我要分享的OAuth2.0內(nèi)容,希望能給大家的理解帶來益處燥透。接下來我還會(huì)分享OpenID Connect協(xié)議內(nèi)容沙咏。希望大家持續(xù)關(guān)注本帳號(hào)辨图。
后續(xù)筆者會(huì)不斷輸出相關(guān)領(lǐng)域的優(yōu)質(zhì)內(nèi)容,希望大家持續(xù)關(guān)注本帳號(hào)肢藐!