在Auth的過程,很常會看到Basic、Bearer 型態的Token,而是用的場景不太一樣。Basic用在存取一個網站、網域的時候,Bearer則是用於存取Protect Resource 的時候。
一般來說是在HEADER中使用Authorization的並帶入存取的Token,如Basic、Bearer等type 的Token。
# Unauthorized Response
GET / HTTP/1.1
# Authorized Query
GET / HTTP/1.1
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
作為HTTP最基本的認證方式,使用明碼的方式進行傳輸 password、user_id。設計面並未考慮到TLS認證,以明碼的方式傳送 password、user_id。
一般來說,在存取資Server的時候,需要預先帶入Token,然而若未能成功驗證通過時,Response 則會回應相關的資訊,帶有WWW-Authenticate HEADER,並帶有Realm (Protection Space)資訊。
Key words:
是以HTTP 1.1 TLS下去定義的 Token,因此使用Bearer必須具備TLS環境。延續使用Basic Token 的WWW-Authenticate、Authorization HEADER,而 proxy authentication 不延續使用。
使用Token的方式:
使用Token時,當HTTP Response Status code 為200時代表成功,然而當失敗的時候則會出現4XX的Status code。
Basic Token: 當授權為「不」通過時,回傳401 code並告知哪個 Protect Scope 錯誤。
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 |
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] The 'Basic' HTTP Authentication Scheme
[2] The OAuth 2.0 Authorization Framework: Bearer Token Usage
[3] Basic Authentication