想達成的功能
一個符合 OAuth2 規範的 Authorization Provider,希望能單純使用 Express.js 來實現,或至少不採用現存的 OAuth2 套件(例如可以用 jsonwebtoken 這個套件來生成 JWT)。
想請求的協助
不敢厚顏奢望有大大特地寫一篇…請問是否有推薦的教學文章或範例?目前搜尋到的教學幾乎都是用套件,但公司要求這個案子在 OAuth2 的部份不要使用套件。唯一找到一個不是使用套件的教學實作的 GrantType 是 Password ,我想優先做 Authorization Code Flow 。(另外想請教為什麼會有 Password Flow?可以直接拿帳密的話,第三方擁有帳密的話不就等同擁有 User 的完整權限?)
或者有沒有推薦相關的教學課程或影片(付費的也可以)。
我目前的理解
目前看了蠻多文章,覺得對功能跟規範還是似懂非懂。主要參考的文章是這系列,對照 RFC6749 一起看 (Yu-Cheng Chuang’s Blog - OAuth 2.0 筆記 (1) 世界觀)
其他也看了很多中英文的介紹,在 OAuth2 的四個角色的介紹及四種 Grant Flow 的介紹都講的很詳細,但幾乎都沒有實作細節(或者說沒有用 Express 的教學範例…)
看完還是不太懂我到底要實現哪些功能才是一個基本的 Auth Provider,所以先嘗試使用了 Google 的第三方登入,先從當第三方來觀察四者之間的互動有哪些,有什麼 Endpoint 。目前推測要完成的功能有
.Auth Server & Resource Server
因為我要做的也就是第三方登入而已,觀察 Google 的服務,它在把 access_token response 回來的同時就把 id_token 一起送過來了,那 access_token 要用來幹嘛 ... orz
我的 Resource Server 擁有的資源或說唯一要提供的資訊就是 User 的 unquine id(或基本的 profile) ,讓第三方知道我這裡確實有這個人而且他能正確登入。所以在這個情境下,其實用不到 access_token ?我原本的想法是拿到 access_token 之後再去跟 Resource Server 要 UserProfile ,但看了 Google 的做法之後開始疑惑起 access_token 要用在哪…
雖然我不知道 access_token 現在要用在哪,也許以外要增加提供其他機密資訊就會用到。但總之 Resource Server 必需要能解讀 access_token 對嗎?要怎麼驗證 access_token 是正確的?是要把 access_token 存資料庫嗎?還是一樣弄成 JWT,但弄成 JWT 就代表 Resource Server 也會知道 client_secret,這樣做符合規範嗎?或者 Auth Server 要另外提供 API 用來驗證 access_token
另外想問關於 Google 的第三方登入,我找到的文件幾乎都是用 Google 提供的 SDK 來做,只有一篇教學提供了 Endpoint 跟 Parameter。
Google API authentication with OAuth 2 —on the example of gmail
想請問該如何快速有效的找到這些 Endpoint 跟使用規範?包括 Google API 有哪些 scope 可以使用,我一整個找到眼花繚亂,看 Google 的文件也都是先提供 SDK 的用法…
這是我轉職後第一個全端任務 @@,有些概念其實還不是很熟悉,搞不好提問內容也有誤解 Orz … 請多包涵,先在此謝過