---
# System prepended metadata

title: OAuth
tags: [觀念重點區]

---

# OAuth 

https://ithelp.ithome.com.tw/articles/10225956


https://xiang753017.gitbook.io/zixiang-blog/security/cong-rfc-gui-ge-shu-guan-dian-jie-xi-oauth-2.0

## 前提
身分驗證（authentication）、授權（authorization）與存取控制（access control）的差異


有四種授權方式
一種是服務與服務之間的串接，而不經由使用者
剩下三種都會經過使用者


Authorization Code Grant 相較安全的主因是：token 的傳輸都是在後端，對使用者而言是無感或不存在的。也因此攻擊者無法藉由使用者操作不當進而取得 token 與權限。

解釋
https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
## OAuth2 标准与微服务的单点登录
https://luo3.org.cn/posts/learn/oauth2-and-sso-solutions-between-microservices/

OAuth2在微服务架构中的应用
https://www.cnblogs.com/hzhuxin/p/10849741.html

## jwt vs oAuth
![image](https://hackmd.io/_uploads/BkfGzgU5p.png)
使用 JWT 也有它的缺點。例如，一旦 JWT 被發放，直到它過期之前都不能被撤銷，這可能對於需要高安全性的應用來說是一個問題。在這種情況下，OAuth 提供了更靈活的控制，因為令牌可以隨時被授權服務撤銷

使用 OAuth 來處理第三方應用的授權，而內部服務之間的通信則使用 JWT 來進行身份驗證和授權


![image](https://hackmd.io/_uploads/Byxx7gIca.png)

## code to get token


## 簡介 OAuth 2.0

今天有一個美圖軟體，功能是把使用者上傳到 Facebook 的照片做修圖。使用者要用這個服務的話，必須讓美圖軟體能存取使用者儲存在 Facebook 上的照片。美圖軟體並不是使用者本人，所以無法存取使用者放在 Facebook 上的照片。因此，要讓美圖軟體存取，最直覺最簡單的方法：使用者將 Facebook 的帳號密碼給美圖軟體，這樣就可以讀取使用者的照片了。

只是這樣做會有下面的缺點：

美圖軟體必須保存使用者的密碼才能繼續服務
美圖軟體有了使用者的帳密，代表同時擁有使用者在 Facebook 的所有權力，完全無法限制範圍和期限
使用者只有改密碼才能回收權力，但使用者所有「有提供帳密的第三方應用程式」會同時無法使用
只要有任一個第三方應用程式被駭客入侵了，就會導致使用者密碼外泄（參考第一點），甚至 Facebook 上的所有資料與所有第三方應用程式都會外泄
OAuth 正是為了要解決上面這些問題的框架



OAuth 2.0 只討論如何授權，不討論身分驗證

現今的社群服務非常多，如 Facebook。使用者可以利用這個服務上傳個人照片，並分享給好友。

OAuth 提供者必須要先知道「我是誰」－－也就是身分驗證，才能知道是誰的資源要授權給第三方應用程式。因此在授權成功（即拿到 access token）的同時，其實 OAuth 提供者也同時完成了身分驗證，這就是所謂的「OAuth 登入」



## OAuth 2.0 直接發 JWT
JWT 只管 token 的長相，而不管流程；而 OAuth 2.0 則是定義了授權流程，而不管 token 的長相，因此兩個剛好可以組合在一起使用，這就是 JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens 所在討論的。


## 授權
在 OAuth2 的世界裡，授權指的是使用者，讓第三方應用程式取得使用者的資源。

如：使用者的大頭照放在 Facebook，而某個第三方軟體如 iT 邦幫忙，想取得使用者的大頭照，必須要經過使用者授權。注意：要或不要的決定權在於使用者。


## 存取控制
系統管理者，或被授權的使用者，才有權利更改存取控制的策略。目的是管理並控制使用者存取資源的權限。

如：留言板系統，前台使用者只能留言，後台使用者可以刪除留言。再一次與授權比較如下：

* 存取控制：管理者控制使用者可存取哪些資源
* 授權：使用者可控制第三方應用程式能存取哪些資源

## Password, Session, Cookie, Token, JWT, SSO, OAuth
https://blog.bytebytego.com/p/password-session-cookie-token-jwt?utm_source=substack&utm_medium=email
###### tags: `觀念重點區`