在对OAUTH2理解基础上的一个小故事

本文通过一个生动的故事,讲述了OAuth 2.0如何解决授权中的安全问题。故事中,一位富人通过发放口令而非保险箱密码的方式,实现了对保险箱内珠宝的安全管理,形象地解释了OAuth 2.0的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次对wso2的OAUTH2的源码实现阅读过之后,对于OAUTH的认识有了更加深刻的了解.

认识一门技术,首先要从它解决的问题来入手.无论是解决什么问题,都应该贴近生活,更加人性化.下面我就通过一个故事来阐述我眼中的OAUTH.

有一位有钱人,在他的保险箱中存放着无数的珠宝,每次存取珠宝他都是自己通过保险箱的密码亲自操作.但是,后来有钱人忙于生意,有时存取宝物就让手下的佣人去完成,然后在一抽出时间他就把密码改掉.久而久之,他感到这样做非常的累.因为每次只要有佣人操作过保险箱之后就得对密码进行修改, 可是不修改密码的话,那就隐藏意味着他与佣人永久着珠宝,因为密码他们都是知道的.及时修改了密码他也不放心,因为在他修改密码之前他的所有珠宝都是与佣人共享的,很有可能在改密码之前佣人就偷了珠宝.即使佣人是可靠的,如果佣人不经意泄露了密码,在改密码之前被其他的人偷掉了珠宝,那么就严重了.所以,把保险箱的密码告诉别人,这样是不可取的.

这位有钱人终于想到了一个好的办法.就是其他的人想要访问他的保险箱的话不是通过密码,而是一个口令.首先他找到了一个绝对信任的人(gate),其次他对自己的珠宝进行分类(scope),每天他都将所有可以从保险箱中存取宝物的口令(AccessToken)存放到保险箱中,由于需求的不同,口令的有效时间也不同,也许有的口令是一个小时的有效时间,也许是只有一次的使用能力,也许是永久的.他把这些口令都告诉了那位可靠的人.

佣人来找他了,说明需要将项链存放到保险箱中,有钱人想了一想,给了他一个口令(code)在其中包含了这个口令的有效时间,以及对保险箱项链分类的存放操作.于是佣人拿着这个口令去找可靠的人,可靠的人将口令确认之后,把真正访问保险箱的口令给了佣人.佣人拿着口令去访问保险箱,这个佣人想偷拿手镯,发现他没有权限,只好存放项链乖乖存放进去.第二次又去拿着口令访问保险箱的时候,发现已经过期了.因为,这个口令访问一次就会过期.不要以为有钱人这样做就完美了.假设事情是这样的,主人给于了佣人去得到真正口令的口令(code)但是在半路被人劫持,口令(code)被人抢走,那么劫匪将口令给了可靠的人,但是可靠的人并不知道当初有钱人给谁的口令,所以把真正的口令给了劫匪.那么这个时候该分类下的珠宝就会有风险了.不管有钱人这样的设定漏洞有多少,但是他至少避免了所有宝物的丢失(这里其实是重定向url的确认问题).

有钱人的儿子想从里面取珠宝了,也许也得像佣人一般去询问有钱人,可是这里不这样想.假设,有钱人对比较特权的人是有规定的.他儿子直接去找可靠的人,那个人直接将他儿子的专有口令(这个依然是AccessToken)返回.由于是他儿子,将来是要继承家产的,所以,儿子的口令是无限期的.但是,肯定是无限期的么?当然不是,是不是无限期的当然是有钱人说了算.有钱人的年轻老婆想来访问保险箱了,去找可靠的人,像儿子一样获得了口令,取到了满意的东西,殊不知,她的口令可不是无限期的,是在离婚之前.年轻的老婆把口令记在了纸上,在离婚之后偷偷潜入家里,企图取宝物,但是她发现口令无效了.

以上的故事仅仅是个人在对OAUTH的理解上的一些构想,其中有一些时间的阐述可能是站在编程的角度去考虑,在实际的生活中也许有更简单的方法.但是在计算机的世界里却不太可能那样去做.说到底,OAUTH就是在解决一个安全访问,信任危机的问题.在具体的实现上,可能不大相同,但是都基本会遵循OAUTH这样的一套协议.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值