用一个小故事给萌新讲透 OAuth 的实现原理(解释放评论区)

119 天前
 RiverRay
你住在一个贼安全的小区,进出都要门禁卡。

某天,你出门了。恰好一个快递员来了,要送你的包裹 📦。

他站在门口半天进不去,就去找保安了。

“保安大哥,我要送个包裹,但没有门禁卡进不去呀。”快递员说。

保安立马打电话给你:“有个快递员要送包裹,你同意他进来吗?”

你回答:“可以啊,让他放到公共楼层就行”

保安对快递员说:“住户同意了,这是临时通行证,你用这个进门,只能去公共楼层。”

快递员拿着通行证,顺利进门,把包裹放在公共楼层,离开的时候把通信证也揣兜里带走了。

第二天,快递员又来了,发现通行证还没过期,就直接进小区,把包裹放在公共楼层。

第三天,他再次来送包裹,发现通行证过期了,又去找保安。

“保安大哥,我的通行证过期了,能给我一张新的吗?”

保安查了记录,说:“好的,这是新的通行证,你还是只能进公共楼层。”

这次保安没有再联系你,因为你之前已经同意了。

快递员拿着新的通行证,顺利进门,完成了投递。
1980 次点击
所在节点    程序员
6 条回复
RiverRay
119 天前
#0 快递员请求保安允许他进入小区
⬇️
第三方应用请求用户授权:
应用程序向授权服务器(保安)发起授权请求,请求访问用户的资源。
请求的 URL 通常包含 client_id 、redirect_uri 、scope 等参数。


#1
保安打电话给你,确认是否允许快递员进入
⬇️
授权服务器向用户请求授权:
授权服务器将用户重定向到一个登录和授权页面
用户在这个页面上登录并同意授权,授权服务器验证用户身份并获取用户同意

#2
保安给快递员一张临时通行证,允许他进入公共楼层
⬇️
授权服务器发放授权码:
用户同意授权后,授权服务器生成并返回一个授权码给第三方应用
授权码是一个临时的凭证,用于在稍后阶段交换访问令牌


#3
快递员使用通行证进入小区
⬇️
应用程序使用授权码请求访问令牌:
应用程序将授权码发送到授权服务器的令牌端点,换取访问令牌
请求中包含 grant_type 、code 、redirect_uri 、client_id 和 client_secret 等参数


#4
快递员被限制只能进入公共楼层。
⬇️
访问令牌的权限范围( scope ):
访问令牌中包含 scope ,定义了应用程序可以访问的资源和操作范围
例如,scope=read 表示应用程序只能读取资源,不能进行修改


#5
电子钥匙过期,保安第二次发通行证
⬇️
刷新令牌机制:
访问令牌有有效期( expires_in ),到期后需要使用刷新令牌来获取新的访问令牌
应用程序使用刷新令牌向授权服务器请求新的访问令牌,不需要再次请求用户授权
pfffs
119 天前
666

大佬,我想实现在中国大陆地区的服务器上面使用 google oauth2

求建议
RiverRay
119 天前
@pfffs 可以用第三方帮你折腾

国内推荐:authing 身份云
国外:clerk 或者 supabase
mqllin
118 天前
看了大佬的小故事茅塞顿开
CHTuring
118 天前
应该还少了个步骤,主动解除权限。
evilcoming
118 天前
膜拜

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1055433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX