# OAuth2.0 --- ## Authentication VS Authorization ### Authentication 中文為驗證,主要做身份驗證確保使用者不是怪人,常在後端API設計中看見,下面舉個簡單直白例子 >例子 有一家發大財公司在一棟商辦大樓,而商辦大樓多人雜亂,所以公司在大門設置門禁卡,只有公司內部的人才有這張卡來進入公司,而卡片代表持卡人的身份驗證物品 ### Authorization 中文為授權,主要賦予使用者權限,與前者不同在於服務認得這人但能控制他的權限,在API設計授權可看到使用者可用哪幾隻API,簡單舉例 >例子 發大財公司有小明與小花員工,小明為一般的後端工程師,小花為老闆的漂亮秘書,而小明的門禁卡無法進入老闆的辦公室,但小花身為老闆秘書可以進入老闆辦公室,小花倍授權可進入 ## Credentials 有了前面授權與權限的知識後,來講講Credentials(憑證),Credentials只用來證明如: - 使用者 - 應用程式 - 設備 這三者的身份資料信息,Credentials會提供給Auth Service來做身分證明,作用於授權與權限身份驗證,常見的Credentials類型有: - 帳號與密碼 - Token - 指紋、臉部紋路 - OTP(SMS or Email verify code) - API Key - RFID卡 # OAuth2.0(Open Authorization) OAuth2.0是一種開放標準協議,在不暴露用戶密碼的情況下,安全地訪問用戶的資源。常應用於第三方應用需要訪問用戶數據的情況,可以是網頁或者APP中進行存取私人資料方式,OAuth協議在第三方供應商與使用者帶來了以下好處: - 增加使用者體驗,無需做繁瑣註冊尤其在APP應用程式達到非常好的效果 >例子:剛下載一個APP卻可用Google、Line、Facebook登入,增加使用者體驗 - 以第三方應用帶來用戶資料與提高用戶在第三方服務存留率 >例子:當使用者用Google來登入APP應用程式,可以收集使用者一些私人資訊,並強化Google存留率,因為裝置已經與Google帳號做綁定 - 有利於第三方應用社交相關服務的推廣 >例子:因為大多APP都可用Google登入,所以可能會讓使用者即使沒有Google帳號也會因要使用APP而註冊,同時Google能增加自己社群服務人數 OAuth 2.0 的推出是為了解決開發人員在使用 OAuth 1.0 時面臨的許多痛點,包括複雜的簽章和對非瀏覽器應用程式的支援不佳。 ## Role RFC 6749中,提到OAuth2.0有四個角色分別為: - resource owner(可授權角色) 資源所有者決定是否授權某個第三方應用程式訪問他們的資源,其實就是指使用者 >例子:像是在APP用Google登入其他APP時會有是否要讓他人存取資源的彈窗 - resource server(第三方供應商) 客戶端通過 OAuth 2.0 流程,獲取並使用授權碼或令牌來訪問資源所有者的資源。 >例子:常見有Google、Meta、X保存使用者resource者 - client(應用程式) Client是請求訪問資源的應用程式,它是 OAuth 2.0 流程中的實際請求方。客戶端通常是代表資源所有者的第三方應用程式。 - authorization server authorization server負責驗證資源所有者的身份,並向Client發放authorization code 或存取Token 。它管理授權的過程。 | 角色 | 描述 | 例子 | |--------------------|--------------------------------------------------------------|--------------------------------------------------------------| | **Resource Owner** | 資源所有者,通常是使用者,授權第三方應用程式訪問其受保護的資源。 | 使用者在 Google 登入時彈出的授權框,讓用戶選擇是否讓應用程式存取其 Google 帳號中的資料。 | | **Resource Server** | 存儲和管理使用者資源的伺服器,並處理來自客戶端的授權請求。 | Google、Meta、X 等服務商提供的儲存使用者資料的伺服器。 | | **Client** | 代表資源所有者發送請求的應用程式,必須經過授權才能訪問資源。 | 一個第三方應用程式(例如日曆應用程式)希望訪問使用者的 Google 硬碟數據。 | | **Authorization Server** | 驗證資源所有者並發行授權碼或存取令牌的伺服器。 | Google OAuth 伺服器,負責發行授權碼並交換為存取令牌。 | ## OAuth2 Authentication Flow OAuth2 的身份驗證流程是一種機制,用於驗證使用者身分並授權應用程式存取使用者資源 整體流程流程(Authorization Code Grant): - 使用者存取客戶端,客戶端將使用者引導至Authorization Service。 - 使用者在Authorization Service登入並同意授權,授權伺服器返回授權碼(Authorization Code)給客戶端。 - 用戶端使用Authorization Code向Authorization Service請求Access Token(PKCE)。 - 授權伺服器Authorization Code並傳回access token。使用access token存取資源伺服器。 https://ithelp.ithome.com.tw/m/articles/10277215 以下以Google Dirver為例子,來講述OAuth2.0 Authentication Flow,實際Google OAuth2細節可能要參考Google官方document,這邊講述個大概OAuth2.0 Authentication Flow 1. Resource Onwer,進入Applaction的login頁面時,會顯示第三方登入Button,選擇登入的第三方login 將會從OAuth Service返回 login page 2. 返回login page Resource Owner會輸入帳號密碼或者其他登入方式進行登入,登入後會詢問資源consent page來同意授權,同意授權完後OAuth Service會return authentication code 3. 接著需要拿authentication code來交換accesstoken與refresh token 4. 取得access token 與refresh token後,就可以針對授權資源做操作了  ## Grant Types OAuth 2.0定義了四種授權類型(Grant Types),前文所提的是最常見的Authorization Code Grant,而每種適用於不同場景以及授權方式: ### Authorization Code Grant with PKCE 最常見Grant Types,也相較其他Grant Types安全性較好一點,因為通常會在後端做處理整個Authentication Flow取得Access Token,且對於取得Access Token透過Authorization Code來與OAuth Service來取得相較安全
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up