OAuth,Token和JWT

原文地址: http://www.itdecent.cn/p/9f80be6ba2e9

前言

想一想,代碼寫多了,東西看多了之后,對(duì)很多名詞和概念的名字很熟,但是不清楚名字背后的內(nèi)容以及它們之間的聯(lián)系?

比如OAuth,Token和JWT,下面是常見的一些疑問,本文將試著來解答這些問題:

  1. 什么是OAuth?
  2. 什么是Token?
  3. 什么又是JWT?
  4. 三者之間又是什么關(guān)系?

1. OAuth

1.1 定義

OAuth: An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications. 也就是說OAuth是一個(gè)開放標(biāo)準(zhǔn),提供了一種簡(jiǎn)單和標(biāo)準(zhǔn)的安全授權(quán)方法,允許用戶無需將某個(gè)網(wǎng)站的用戶名密碼提供給第三方應(yīng)用就可以讓該第三方應(yīng)用訪問該用戶在某網(wǎng)站上的某些特定信息(如簡(jiǎn)單的個(gè)人信息)。

1.2 歷史

1.3 OAuth 2.0 協(xié)議處理流程

     +--------+                               +---------------+
     |        |--(A)- Authorization Request ->|   Resource    |
     |        |                               |     Owner     |
     |        |<-(B)-- Authorization Grant ---|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(C)-- Authorization Grant -->| Authorization |
     | Client |                               |     Server    |
     |        |<-(D)----- Access Token -------|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(E)----- Access Token ------>|    Resource   |
     |        |                               |     Server    |
     |        |<-(F)--- Protected Resource ---|               |
     +--------+                               +---------------+

具體的詳細(xì)介紹可以參考軟大師的: 理解OAuth 2.0

2. Token

Token就是獲取信息的憑證,如上述的Access Token,關(guān)于Token的具體使用有相應(yīng)的RFC文件指導(dǎo): The OAuth 2.0 Authorization Framework: Bearer Token Usage

2.1 Access Token 類型

Token的類型可分為兩種:

  1. bearer. 包含一個(gè)簡(jiǎn)單的Token字符串.
  2. mac. 由消息授權(quán)碼(Message Authentication Code)和Token組成.

示例:

// bearer
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer mF_9.B5f-4.1JqM

// mac     
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: MAC id="h480djs93hd8",
                   nonce="274312:dj83hs9s",
               mac="kDZvddkndxvhGRXZhvuDjEhGeE="

2.2 認(rèn)證請(qǐng)求方式

使用Token的認(rèn)證請(qǐng)求的方式有三種,客戶端可以選擇一種來實(shí)現(xiàn),但是不能同時(shí)使用多種:

  1. 放在請(qǐng)求頭
  2. 放在請(qǐng)求體
  3. 放在URI

詳細(xì)如下:

2.2.1 放在請(qǐng)求頭

放在Header的Authorization中,并使用Bearer開頭:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

2.2.2 放在請(qǐng)求體

放在body中的access_token參數(shù)中,并且滿足以下條件:

  1. HTTP請(qǐng)求頭的Content-Type設(shè)置成application/x-www-form-urlencoded.
  2. Body參數(shù)是single-part.
  3. HTTP請(qǐng)求方法應(yīng)該是推薦可以攜帶Body參數(shù)的方法,比如POST,不推薦GET.

示例:

POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

access_token=mF_9.B5f-4.1JqM

2.2.3 放在URI

放在uri中的access_token參數(shù)中

GET /resource?access_token=mF_9.B5f-4.1JqM
Host: server.example.com

3. JWT

JWT: JSON Web Tokens, 這是一個(gè)開放的標(biāo)準(zhǔn),規(guī)定了一種Token實(shí)現(xiàn)方式,以JSON為格式,相應(yīng)的RFC文件為: JSON Web Token (JWT)

JWT的結(jié)構(gòu)分為三個(gè)部分:

  • Header: 存放Token類型和加密的方法
  • Payload: 包含一些用戶身份信息.
  • Signature: 簽名是將前面的Header,Payload信息以及一個(gè)密鑰組合起來并使用Header中的算法進(jìn)行加密

最終生成的是一個(gè)有兩個(gè).號(hào)連接的字符串,前兩個(gè)部分是Header和Payload的Base64編碼,最后一個(gè)是簽名,如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.MejVLl-m7KMfaay0nXxDWGEVPWsQ2f6SZnTvq4fXaLI

詳細(xì)內(nèi)容參考: Introduction to JSON Web Tokens

4. 問題解答

4.1 什么是OAuth?

也就是說OAuth是一個(gè)開放標(biāo)準(zhǔn),提供了一種簡(jiǎn)單和標(biāo)準(zhǔn)的安全授權(quán)方法,允許用戶無需將某個(gè)網(wǎng)站的用戶名密碼提供給第三方應(yīng)用就可以讓該第三方應(yīng)用訪問該用戶在某網(wǎng)站上的某些特定信息(如簡(jiǎn)單的個(gè)人信息),現(xiàn)在一般用的是OAuth 2.0(不兼容1.0).

4.2 什么是Token?

Token就是獲取信息的憑證,如上述的Access Token,讓客戶端無需用戶密碼即可獲取用戶授權(quán)的某些資源.

4.3 什么又是JWT?

JSON Web Tokens, 這是一個(gè)開放的標(biāo)準(zhǔn),規(guī)定了一種Token實(shí)現(xiàn)方式,以JSON為格式.

4.4 三者之間又是什么關(guān)系?

這三個(gè)相互連接且是由大到小的一種關(guān)系,OAuth規(guī)定授權(quán)流程,Token為其中一環(huán)的一個(gè)信息載體,具體的一種實(shí)現(xiàn)方式由JWT規(guī)定.

5. Reference

  1. OAuth
  2. 理解OAuth 2.0
  3. JWT
  4. What is the difference between OAuth based and Token based authentication?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 陽光明媚,刺眼,壓得讓人抬不起頭 透過櫻樹映襯,更感覺暈暗,無神 這里一切都沒變,寧靜,沉默 拖著沉重的身體,帶著...
    暗門閱讀 442評(píng)論 0 1
  • 最近一直在思索,冷暴力、語言傷害造成了太多不必要的悲劇,正好前一段有個(gè)好朋友給我推薦了兩本書:一本是《非暴力溝通》...
    jetallee閱讀 1,058評(píng)論 0 0

友情鏈接更多精彩內(nèi)容