網頁

2022/8/28

網路應用程式的Token是什麼?

網路應用程式提到的token是指要存取資源的通行證,即證明身份取得權限的一種東西。


寫程式初期搞不太懂token是什麼意思,查翻譯叫「代幣」或「令牌」,直覺讓我想到下面這玩意兒。



起初只了解發送請求有時需要用到token。曾看過把token比喻為夜店/遊樂園印章的好例子(不過我當時太菜仍難以理解)。Token像是進去遊樂園玩到一半臨時要離開(吃飯、拿東西)出口,但待會要回來(重新進入)的一個證明,遊樂園的員工可能會在你第一次進來時在手或票根蓋個印章代表你已剪過票,之後出去再進入秀出這個印章給守門員看證明你已剪過票而不被刁難。不過這印章通常有時效性,例如慢慢褪色消失或上面壓有期限,當消失或超過期限及無法憑此進入。

而網路應用的token和遊樂園的印章作用是一樣的。Client第一次登入/請求server要輸入帳密通過驗證取得存取權限,而server會返回一個token給client,之後client要重新請求資源及可憑此token證明當初登入時的權限(e.g. 一個VVIP高級用戶)。而token通常是用密碼學算出的雜湊碼(總之是一堆看不懂的亂碼),client收到token可暫存在cookie,下次請求時便可從cookie取得token隨附來通過驗證。而token通常是附加在HTTP請求頭(HTTP Request Header)的Authorization欄位。

以下是常見的HTTP token類型:

  • Basic
  • Digest
  • OAuth
  • Bearer

例如JWT使用Bearer token,在Authorization欄位看起來如下,那串亂碼即為JWT的token:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

下面以curl發送請求夾帶JWT token。

$ curl https://abc.com/employees \
> -H "Accept: application/json" \
> -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"


1 則留言: