Skip to content

oidc

OAuth 2.0 原理 下面可以通过一个场景来解释一下,OAuth2.0的原理:一个快递员的问题

假设你住在一个大型的小区中,你经常点外卖,而小区有门禁系统,进入的时候需要输密码

为了能让快递员进入,你就需要为他提供一组密码

如果你直接把你的密码给了快递员,那么他就有了和你一样的权限,如果你想取消他的权限,那只能改密码了,这样你还要通知使用该密码的其他人

所以你打算设计一套授权机制,既能让快递员进来,又能限制他的操作并且能随时回收这个密码

授权机制的设计 于是,你想出了一套办法,完善门禁系统:

在门禁系统下面安装一个按钮,快递员要想进入小区,首先得先按这个按钮来获取进入小区的权限 他按下按钮之后,在你手机会显示出一条信息,xxx公司的xxx快递员在获取门禁的权限 当你确认信息之后,在手机上按下确认授权,手机就会向门禁发送一条授予xxx员工权限的信息 门禁收到确认授权信息之后,就向快递员发送一个令牌;该令牌只有七天的权限,并且只能通过小区等几个指定的门禁 快递员拿到令牌之后,就能进入小区了 此处为什么要给他生成一个令牌,而不是直接给他开门呢?

因为从小区大门到目的地可能会有多个门禁,所以就不用一直等着给快递员开门了;同样的,如果第二天快递员再来时就不需要再获取权限了

密码和令牌都让获取第三方获取用户数据,但是相较于密码,令牌有如下的有点:

令牌是短暂的,过期就会失效;而密码一般长期有效,用户不更改不会变化 令牌可以被撤销,比如你不想让某个快递员进入了你就可以撤销他的令牌 令牌能够指定权限范围,比如你可以限定快递员只能进入大门和二号楼的门禁 令牌能够有效的控制第三方应用的访问权限和访问时长;当然,令牌也是必须要保密的,因为泄露令牌和泄露密码一样,也会造成安全问题,因此一般令牌的有效时间都会设置的比较短