認證和授權(quán)
認證(Authentication)
常用的身份認證的方式:
1廉白、用戶名和密碼登陸
2、郵箱發(fā)送登陸鏈接
3乖菱、手機號接收驗證碼
授權(quán)(Authorization)
常見的授權(quán)登錄有:QQ坡锡、微信蓬网、微博、github
OAuth
概念:
OAuth是互聯(lián)網(wǎng)行業(yè)一種標(biāo)準的授權(quán)方式鹉勒。各個公司根據(jù)這一套標(biāo)準實現(xiàn)自己的OAuth認證和授權(quán)流程帆锋,而第三方想要接入這個流程,就需要使用OAuth這套方案禽额。
角色:
- 客戶端:瀏覽器端
- 服務(wù)端:開發(fā)這個網(wǎng)站對應(yīng)的服務(wù)器端
- 授權(quán)服務(wù)器:提供OAuth第三方接入服務(wù)的提供商锯厢,比如QQ、微信等脯倒。
授權(quán)方式:
- 授權(quán)碼 Authorization Code
- 密碼式(password):用OAuth提供方暴露的API实辑,進行本網(wǎng)站的用戶名和密碼登陸。(不推薦藻丢,信任和安全剪撬,一般用于公司內(nèi)部的登陸方式)
- 客戶端憑證(client credentials)
Authorization Code
通過認證碼的認證授權(quán)方式進行OAuth的接入時,主要流程分別是以下幾步:
- 客戶端發(fā)起請求redirect到OAuth接入方并附帶上client_id
- 用戶在redirect之后的網(wǎng)站上輸入用戶名和密碼
- 登陸成功之后悠反,OAuth接入方會返回給服務(wù)端一個code残黑。
- 服務(wù)端拿到code之后,拿著client_secret和code向OAuth接入方申請獲得Token
- 服務(wù)端拿到Token之后斋否,進入授權(quán)窗口
- 授權(quán)成功梨水,跳轉(zhuǎn)到客戶端網(wǎng)站。
Github OAuth第三方接入
前期準備
1茵臭、前端項目和服務(wù)端項目
2疫诽、在github 中創(chuàng)建OAuth應(yīng)用
創(chuàng)建應(yīng)用流程
https://docs.github.com/cn/developers/apps/building-oauth-apps/creating-an-oauth-app
api文檔: https://docs.github.com/cn/developers/apps/building-oauth-apps/authorizing-oauth-apps
涉及的api
跳轉(zhuǎn):簡易版可只攜帶client_id
url: https://github.com/login/oauth/authorize
param:
- client_id:client_id是注冊時的client_id
- scope:希望得到的權(quán)限范圍
- redirect_uri:授權(quán)后重定向到項目的地址,必須和注冊Github OAuth App時的redirect uri相同
- login:用于登錄和授權(quán)應(yīng)用程序的特定帳戶笼恰,如果你在該網(wǎng)站登陸過github并授權(quán)踊沸,則在此請求OAuth時免去登陸步驟。
- state:不可猜測的隨機字符串社证。它用于防止跨站點請求偽造攻擊。
- allow_signup:在OAuth流程中评凝,是否向未認證的用戶提供注冊GitHub的選項追葡。默認值為true。false在策略禁止注冊的情況下使用奕短。
請求****token****: post
url: https://github.com/login/oauth/access_token
param:
- client_id:必需宜肉,標(biāo)明token使用方
- client_secret:必需,標(biāo)明token使用方
- code:必需翎碑,代表用戶已授權(quán)
- redirect_uri:同上
- state:同上
請求用戶信息:****get
url: https://api.github.com/user
header:
Authorization:即請求access_token時返回的access_token谬返,該字段統(tǒng)一是token +access_token
綜上
總共的核心步驟如下:
- 注冊應(yīng)用賬號
- 前端頁面跳轉(zhuǎn)授權(quán)頁面
- 授權(quán)完跳轉(zhuǎn)到后端接口并會攜帶code
- 后端接口用code換取token
- 用token和賬號秘鑰換取用戶信息
- 比較更新或新增用戶數(shù)據(jù)
- 存jwt token cookie
- 重定向到前端頁
Demo源碼:
包含跳轉(zhuǎn)登錄,數(shù)據(jù)庫存儲日杈、用戶詳情遣铝、用戶列表等接口和功能佑刷;
前端:https://github.com/Aimee1608/github-oauth-admin
后端:https://github.com/Aimee1608/github-oauth-server