Session 、 Cookie、 OAuth & Express middleware

session 是一種辨識的機制,建立資料加上憑證後,藉由製作一組憑證,將憑證給予客戶端,下次客戶端造訪伺服端的時候,將憑證傳送回來做為辨識,使伺服器辨識出是哪個客戶端的機制。
如同店家有一個服務系統,對應獨一無二的編號,將編號內客戶喜好或資料存入,發送獨一無二的編號給予客戶,使得下次客戶造訪便得以藉由編號提供相對應的服務。

cookie 則是將 session 憑證存在客戶端,由客戶自己管理的一種方法,在需要的時候傳送回去伺服端表明身分。

註冊

當瀏覽器使用者註冊路由向伺服器傳送請求時,伺服器會與資料庫帳號資料做比對,當比對不成功時,表示使用者為新申請者,會將接收到的新資料儲存起來,做為新帳號資料。

登入

當瀏覽器使用者使用使用登入路由時,向伺服器傳送請求,伺服器接收到請求與資料庫做為比對,當比對成功,就能夠進入使用服務的狀態。

使用服務的時候,使用者與客戶端不是處於保持連線的狀態,所以會使用到 session 機制,藉由客戶端存放在 cookie 中的 cookie-based session 憑證訊息,辨識使用者,以便回傳相對應資訊。就像是進到貴賓室而店家有紀錄對應客製化專屬服務一般。

登出

而登出服務則是牽扯到 cookie 存放 cookie-based session 憑證訊息,將存放在客戶端的資料清除,在下次造訪相同網站便沒有帶有憑證,導致網站認不出來而沒有專屬畫面。

就像是去了貴賓室卻無法表明身分,而無法使用客製化服務,只能使用一般服務。

甚麼是OAuth?使用OAuth好處?OAuth的流程有哪些腳色?
OAuth 是一種授權框架,允許應用程式在有限制的授權下將使用者的身分認證委派給帳戶管理的伺服端,如 Facebook、GitHub,提供給應用程式訪問帳號資訊的權利。

OAuth 提供更好的網路認證環境,應用程式信任身分資源提供者,藉由有限的授權下,藉由身分認證的提供者產生的 access token 對使用者進行身分認證,使用者可以快速使用,也減少應用程式方的工作程序。

OAuth則扮演著四種腳色
Resource Owner: 帳戶使用者
Client: 應用程式,需要被授權取得訪問帳號資訊的一方。
Resource / Authorization Server: resource server 擁有帳戶資料的伺服端,Authorization Server 發給 access tokens 給應用程式。

簡易流程

  • 應用程式向授權網站發出請求
  • 授權網站要求帳戶使用者請求授權
  • 帳戶使用者同意後。授權網站向應用程式發送 access token
  • 應用程式向帳戶管理伺服端發送 access token 取得資料,核對無誤取得客戶資料、完成登入。

簡單介紹 Express middleware? middleware有哪些種類? 流程簡述。

middleware 的意思是介於軟體與另一軟體的中間物,Express middleware 是一個功能函式,每次傳入請求時,都是由給予 middleware 的路由去控制,執行用來處理 request、response、next。
而每個 middleware 處理的功能皆有所不同,我們可以藉由 next method 將每個 middleware 串聯起來去完成所需要的結果。

  • Application-level middleware: 使用 app.use() 和 app.METHOD() function
  • Router-level middleware: 執行方式如同 application-level middleware 但是被綁訂到 express.Router()
  • Error-handling middleware:使用時必須傳入四個參數 err、req、res、next,app.use((err, req, res, next)),即使不需要使用 next 參數也要加它加入。
  • Built-in middleware: 從版本4.X開始 Express 不再依賴 Connect ,可以使用 express.static、express.json、express.urlencoded。
  • Third-party middleware:使用 npn install package 安裝到 node.js module 使我們可以更方便的使用。

middleware 簡易執行流程

  • 接收到 request 執行 middleware function
  • 藉由 middleware 更新 request 和 response 物件
  • 如果出現 error 拋出 error 中斷程序,停止 next 方法。
  • 如果沒有問題 next 到下一個 middleware 最後 response 方法結束程序,回傳結果。

express