关于OAuth 2.0不同Grant Type的理解和使用

大家都知道OAuth 2.0 有四种不同的grant type,分不同的业务场景来使用,我在前面的一篇文章也有粗略讲过 微服务架构学习笔记之一认证和授权 - 大概怎么去按照不同业务场景来使用OAuth 2.0的不同grant type, 比如下面这张图

image

但是很多时候还是不能很好的理解为什么要这么划分,关键点在哪里?这又回退到我们要清楚的知道OAuth 2.0 四种不同的grant type的区别是什么。

首先我们先罗列4种的OAuth 2.0的grant type
Authorization Code Flow

authorization-code-flow.jpg

Implicit Flow

implicit-flow.jpg

Resource Owner Password Credential Flow

resource-owner-pwd-flow.jpg

Client Credential Flow

client-credential-flow.jpg

要回答这四种不同的grant type的区别是什么,需要考虑以下维度:

  1. 需不需要用户输入用户名密码?
  2. Client Application是第三方应用还是第一方应用?
  3. 用户输入用户名和密码的界面是谁来提供的?Authorization Server还是第三方应用?
  4. Client Application(需要访问你的资源的应用)能否感知和存储authorization code和access token?

对于第一个问题,4种grant type中只有client credential flow是不需要用户输入用户名和密码,这也就不难解释为什么在只有机器执行的场景下,那么就需要采用client credential flow这种OAuth 2.0的方式,只需要约定好client id和client secret就可以去换取access token来进行resource的访问。这种业务场景一般发生在有些服务器需要定时执行一些job的情况。

对于第二个问题,Client Application是第三方应用还是第一方应用?一般来讲,如果是第一方应用(自己开发的应用)一般我们都认为要安全一些,因为不会故意的去泄露访问resource的access token, 所以一般第一方应用我们可以使用简单的resource owner password credential flow, 这种OAuth 2.0 grant type 节省了通过code去交换access token这一步骤(实际上就是节省了一次网络请求来回),直接通过用户名,密码去获取access token。而第三方应用我们需要采用更加安全的OAuth 2.0 flow, 比如authorization code flow 或者 implicit flow. 至于究竟是选择authorization code flow 还是 implicit flow, 那么可以参见下面第四个问题的回答。

对于第三个问题, 这个也是出于安全性的考虑,我们可以看到,authorization code flow 和 implicit flow 的用户输入credential的界面都是由authorization server提供的H5 page,而resource owner password credential flow则是由client application提供的page (可以是Native App Page, 也可以是H5 Page), 由authorization server提供的H5 page会更加安全一点。

对于第四个问题,Client Application(需要访问你的资源的应用)能否感知和存储authorization code和access token? 我们都知道最常用的是authorization code flow,它是最安全的,它需要先通过用户的身份验证,然后获得一个code,再拿这个code去authorization server交换access token和refresh token。而我们都知道access token本身是有时效性的,如果有人很容易的拿到code 或 refresh token,那么就基本上可以随意随时的去访问你的resource了,因为他可以不断的通过refresh token 去刷新access token。 而为什么第三方的SPA使用的是implicit flow 而第三方的Native App却使用的是authorization code flow? 理论上第三方应用都应该使用authorization code flow,但是如果你仔细看下,implicit flow中是没有code 和 refresh token的,而SPA应用(本质上是web,需要通过浏览器的)更加容易去暴露code 和 refresh token, 所以才在第三方的SPA应用中使用了implicit flow,而只给了access token, 一旦过期,则需要重新用户名密码验证。

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

推荐阅读更多精彩内容