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

前言

在Auth的过程,很常会看到Basic、Bearer 型态的Token,而是用的场景不太一样。Basic用在存取一个网站、网域的时候,Bearer则是用於存取Protect Resource 的时候。

From personal blog

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] The 'Basic' HTTP Authentication Scheme
[2] The OAuth 2.0 Authorization Framework: Bearer Token Usage
[3] Basic Authentication


<<:  透过 CancelToken 解析 Axios 原始码

>>:  【*】AI Go Senior 补充 (2021)

LibShare-typeOrmGenerator

为什麽要写这篇呢? 新任务开发总会遇到一些麻烦的前置动作(ex. 设计DB schema 、建立t...

Day24【Web】网路传输协定:TCP 与 UDP

TCP,Transmission Control Protocol 中文为「传输控制协定」 UDP,...

Day6 梯度提升树(Gradient Boosting Decision Tree)

梯度提升树是什麽? 讲人话就是将随机森林的概念更进一步应用,策略性地逐步建构多棵决策树模型,间接让重...

【Day10】[资料结构]-杂凑表Hash Table-实作

杂凑表(Hash Table)建立的方法 hash: 杂凑函式 add: 新增资料 search: ...

【杂谈】 今天就来点闲聊吧 - 铁人赛观察①

因爲本系列後续内容另有规划,虽然会在多发表几篇。 但与系列无关,今天就先来闲聊吧! 徽章出现啦~!...