✍️
ZiXiang-Blog
  • Jerry Wang Blog
  • 使用 TorchServe 部署 Model
  • How do AppRTC work in WebRTC mechanism ?
  • [系統設計]- 容易產生設計盲點
  • Golang
    • [Golang] Goroutine Concurrency多執行緒淺談
    • [Golang]: 進階用法
    • Golang go mod 入門
    • [Golang] 讓 Goroutine Debug 變得更簡單
  • Security
    • HTTP Token 使用方式: Basic Token v.s Bearer Token
    • 從 RFC 規格書觀點解析 OAuth 2.0
    • 區塊鏈物聯網架構 解決哪些安全性議題?
  • Broker
    • [深入淺出MQTT]: v3.1.1與v5 的差異
    • Broker 到底是什麼?
  • patterns
    • Patterns for Organizing Domain Logic
    • Domain Model: 從無到有規劃新的服務
    • 淺談CQRS
    • Backend System in Microservice Architecture: Where Does data store?
    • Ambassador pattern with Shared Database Pattern
    • Microservice Pattern 犧牲了什麼?
  • K8s
    • 分散式系統: 現代軟體架構與設計考量
    • Kubernetes 超入門
    • Kubernetes 架構
    • K8s 在 DevOps 中的作用
  • Database
    • Relation Database Index Overview
    • Draft: RDBMS(MySQL) v.s NoSQL (Monogo)
    • [淺談]- How Do RDBMS Thread work ?
    • [淺談]-NoSQL資料庫怎麼選?
    • How do pick the database more correctly?
    • Draft: 關聯式資料庫需要知道的幾件事
  • HTTP
    • Overview The WebSocket Mechanism
Powered by GitBook
On this page
  • Token 怎麼使用?
  • Basic Token
  • Bearer Token
  • Token Response Error
  • 總結
  • 參考資料

Was this helpful?

  1. Security

HTTP Token 使用方式: Basic Token v.s Bearer Token

在Auth的過程,很常會看到Basic、Bearer 型態的Token,而是用的場景不太一樣。Basic 用在存取一個網站、網域的時候,Bearer則是用於存取Protect Resource 的時候。

Previous[Golang] 讓 Goroutine Debug 變得更簡單Next從 RFC 規格書觀點解析 OAuth 2.0

Last updated 4 years ago

Was this helpful?

Token 怎麼使用?

一般來說是在HEADER中使用Authorization的並帶入存取的Token,如Basic、Bearer等type 的Token。

Authorization Header Example
# Unauthorized Response
GET / HTTP/1.1 

# Authorized Query
GET / HTTP/1.1 
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Basic Token

作為HTTP最基本的認證方式,使用明碼的方式進行傳輸 password、user_id。設計面並未考慮到TLS認證,以明碼的方式傳送 password、user_id。

一般來說,在存取資Server的時候,需要預先帶入Token,然而若未能成功驗證通過時,Response 則會回應相關的資訊,帶有WWW-Authenticate HEADER,並帶有Realm (Protection Space)資訊。

Key words: 1. Realm(Protection Space): Token有效的網域。 2. charset: 用於設定schema 的編碼,只能允許utf-8一種

Bearer Token

是以HTTP 1.1 TLS下去定義的 Token,因此使用Bearer必須具備TLS環境。延續使用Basic Token 的WWW-Authenticate、Authorization HEADER,而 proxy authentication 不延續使用。

使用Token的方式: 1. 使用Authorization HEADER: Ex: Authorization: Bearer QWxhZGRpbjpvcGVuIHNlc2FtZQ== 2. 使用Form Body: 不建議將Token加入Body,使用時 ,並使用GET 之外的 HTTP verbs (POST、DELETE、PUT) HEADER: Content-Type: "application/x-www-form-urlencoded" 3. 直接使用在URI : 一般來說不會使用這種方法,除非是Authorization header不支援,或者protect resource 支援該方法。 Ex: GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1

Token Response Error

使用Token時,當HTTP Response Status code 為200時代表成功,然而當失敗的時候則會出現4XX的Status code。

Basic Token: 當授權為「不」通過時,回傳401 code並告知哪個 Protect Scope 錯誤。

Basic Token Error Example
HTTP/1.1 401 Unauthorized
Date: Mon, 04 Feb 2014 16:50:53 GMT
WWW-Authenticate: Basic realm="WallyWorld"

Bearer Token: 當授權為「不」通過時,回傳400、401、403 code,並根據狀況回傳對應的錯誤。

Error Type

說明

invalid_request

Response 400 error code,表示Request 缺少參數或者多了一些參數等錯誤

invalid_token

Response 401 error code,表示Token 錯誤,通過不了認證

invalid_scope

Response 403 error code,表示Token無權存取該Protect Resource

Bearer Token Error Example
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                  error="invalid_token",
                  error_description="The access token expired"

總結

Basic Token 主要還是使用在網域上的防護(Realm),而Bearer則是針對protect resource的存取,主要還是使用在Auth 2.0 上頭,且一定要在TLS環境(HTTPS)使用

參考資料

[1] [2] [3]

The 'Basic' HTTP Authentication Scheme
The OAuth 2.0 Authorization Framework: Bearer Token Usage
Basic Authentication