OAuth,Token和JWT

原文地址: https://www.jianshu.com/p/9f80be6ba2e9

前言

想一想,代码写多了,东西看多了之后,对很多名词和概念的名字很熟,但是不清楚名字背后的内容以及它们之间的联系?

比如OAuth,Token和JWT,下面是常见的一些疑问,本文将试着来解答这些问题:

  1. 什么是OAuth?
  2. 什么是Token?
  3. 什么又是JWT?
  4. 三者之间又是什么关系?

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是一个开放标准,提供了一种简单和标准的安全授权方法,允许用户无需将某个网站的用户名密码提供给第三方应用就可以让该第三方应用访问该用户在某网站上的某些特定信息(如简单的个人信息)。

1.2 历史

1.3 OAuth 2.0 协议处理流程

     +--------+                               +---------------+
     |        |--(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 ---|               |
     +--------+                               +---------------+

具体的详细介绍可以参考软大师的: 理解OAuth 2.0

2. Token

Token就是获取信息的凭证,如上述的Access Token,关于Token的具体使用有相应的RFC文件指导: The OAuth 2.0 Authorization Framework: Bearer Token Usage

2.1 Access Token 类型

Token的类型可分为两种:

  1. bearer. 包含一个简单的Token字符串.
  2. mac. 由消息授权码(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 认证请求方式

使用Token的认证请求的方式有三种,客户端可以选择一种来实现,但是不能同时使用多种:

  1. 放在请求头
  2. 放在请求体
  3. 放在URI

详细如下:

2.2.1 放在请求头

放在Header的Authorization中,并使用Bearer开头:

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

2.2.2 放在请求体

放在body中的access_token参数中,并且满足以下条件:

  1. HTTP请求头的Content-Type设置成application/x-www-form-urlencoded.
  2. Body参数是single-part.
  3. HTTP请求方法应该是推荐可以携带Body参数的方法,比如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参数中

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

3. JWT

JWT: JSON Web Tokens, 这是一个开放的标准,规定了一种Token实现方式,以JSON为格式,相应的RFC文件为: JSON Web Token (JWT)

JWT的结构分为三个部分:

  • Header: 存放Token类型和加密的方法
  • Payload: 包含一些用户身份信息.
  • Signature: 签名是将前面的Header,Payload信息以及一个密钥组合起来并使用Header中的算法进行加密

最终生成的是一个有两个.号连接的字符串,前两个部分是Header和Payload的Base64编码,最后一个是签名,如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.MejVLl-m7KMfaay0nXxDWGEVPWsQ2f6SZnTvq4fXaLI

详细内容参考: Introduction to JSON Web Tokens

4. 问题解答

4.1 什么是OAuth?

也就是说OAuth是一个开放标准,提供了一种简单和标准的安全授权方法,允许用户无需将某个网站的用户名密码提供给第三方应用就可以让该第三方应用访问该用户在某网站上的某些特定信息(如简单的个人信息),现在一般用的是OAuth 2.0(不兼容1.0).

4.2 什么是Token?

Token就是获取信息的凭证,如上述的Access Token,让客户端无需用户密码即可获取用户授权的某些资源.

4.3 什么又是JWT?

JSON Web Tokens, 这是一个开放的标准,规定了一种Token实现方式,以JSON为格式.

4.4 三者之间又是什么关系?

这三个相互连接且是由大到小的一种关系,OAuth规定授权流程,Token为其中一环的一个信息载体,具体的一种实现方式由JWT规定.

5. Reference

  1. OAuth
  2. 理解OAuth 2.0
  3. JWT
  4. What is the difference between OAuth based and Token based authentication?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 阳光明媚,刺眼,压得让人抬不起头 透过樱树映衬,更感觉晕暗,无神 这里一切都没变,宁静,沉默 拖着沉重的身体,带着...
    暗门阅读 370评论 0 1
  • 美的瞬间都值得用来珍藏,比如一张有故事的照片,它会让你在某个慵懒的午后带你回到过去,与过往再来个邂逅。
    行者223阅读 164评论 2 1
  • 最近一直在思索,冷暴力、语言伤害造成了太多不必要的悲剧,正好前一段有个好朋友给我推荐了两本书:一本是《非暴力沟通》...
    jetallee阅读 839评论 0 0