Day21 - 【概念篇】在Flow这段小旅途外的风景

本系列文之後也会置於个人网站


在这一小段路中介绍了Password Flow、Implicit Flow、Code Flow、Refresh Token Flow、Client Credentials Flow、PKCE、Device Code Flow。有些模式已经被发现可能有潜在风险,有些模式无法单独使用。这或许还不是全部,至少到现在为止都还没有提到过金融级应用Flow--CIBA。

Client Initiated Backchannel Authentication Profile(CIBA)

本小节也不会详细介绍CIBA(Client Initiated Backchannel Authentication)。尽管CIBA现在阶段还只是草案(Draft),但在Keycloak v15版本中已经可以使用。大概也已经确实有一些应用使用。

为什麽你不该继续使用Implicit Flow?

在谈到Implicit Flow时候,提到过:

将存取权杖暴露在使用者面前也不是非常好的做法

所以通常在处理完存取权杖後,应该会跳转画面,或至少将资讯清除。在网址列上的权杖(token)简直不要太好取得:

window.location.hash

简单一行就可以取得基础,再做一些分析就可以轻易得到存取权杖。尽管在「Quick Start」的Web App中取得的是id_token,但access_token也是同样。

但爲了让客户端处理,这是不得已选项。要是根本无法取得,就算走标准的code flow也没法玩下去。但主要防范的不是坐在电脑前开着浏览器的资源拥有者,要注意的是注入风险。也就是XSS跨站脚本攻击。

就算不是隐含模式,也很有可能有跳转页面的需求。在跳转页面後网址列上的token自然也就消失了。爲了让跳转的页面能够知道存取权杖,在跳转前有可能将存取权杖储存在localStorage或是sessionStorage

但存localStorage或是sessionStorage是不是就是安全的?我没有答案。同样XSS攻击也可以很容易的取得localStorage或是sessionStorage里的资料。但或许可以使用特别的key,降低被猜测到取得的风险。

可以存取「历史记录」的扩充套件

XSS跨站脚本攻击是不得不多加注意的风险外,其实隐含模式的风险增加也与越发强大的浏览器有关。或者说与越发多样的浏览器扩充套件,与多样的使用环境有关。

XSS跨站脚本攻击在某种程度上还可以透过开发人员多加留意防范。但使用者使用什麽浏览器,又安装了什麽扩充套件就不是开发人员可以轻易处理的风险了。

通常而言,window.hisory相关的API会限制脚本存取浏览器历史记录的能力,但是给浏览器扩充套件的API - WebExtensions API -- history就强大许多。

下面的扩充套件只说明扩充套件确实有可能取得历史记录,不代表存在问题。甚至有些设计的我还觉得蛮方便的

Improved History

History Master

也就是说明就算页面跳转了,恶意的浏览器扩充套件仍有可能透过历史记录找到存取权杖。使用扩充套件的风险远不止这样,类XSS攻击的风险同样存在,甚至可能更多风险。所以在使用时,应该同时留意使用了什麽浏览器,啓用了什麽扩充套件。

小节结语

OAuth的内容可能远不止本系列提到的这麽多,未来还有可能再增加、改版。有些概念很遗憾我也没有很好的理解,只能够以额外的形式做一点补充。

接着会是稍微简单一点,与keycloak有关的内容。在那之後,才会在提到Open-Id,这个可能经常与OAuth一起看到的名词。

参考资料


<<:  Day-23 Toast

>>:  [Java Day26] 6.3. super

Day20实用的线上练习平台

JSFiddle 在刚开始练习JavaScript可以使用这个线上练习工具JSFiddle 因为进入...

Day 18 事件指示器

某些Kernel里面会提供每个任务一个事件指示器(event regiser),就是在任务之内指定需...

[Day16]C# 鸡础观念- 虚拟代工厂~方法(function)

人类的世界有许多的工厂, 将原料送入後就会变成商品, C#的世界里也是, 方法就像一间间的工厂一样,...

DOM实作 密码输入

<!DOCTYPE html> <html lang="en"...

Rust-流程控制-if

利用布林值来决定如何继续执行程序进行决策 例 let n = 3; if n > 2 { pr...