V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RiverRay
V2EX  ›  程序员

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

  •  2
     
  •   RiverRay ·
    leizhenpeng · 62 天前 · 1913 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。
    你住在一个贼安全的小区,进出都要门禁卡。

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

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

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

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

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

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

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

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

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

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

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

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

    快递员拿着新的通行证,顺利进门,完成了投递。
    6 条回复    2024-07-08 14:10:59 +08:00
    RiverRay
        1
    RiverRay  
    OP
       62 天前
    #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
        2
    pfffs  
       62 天前
    666

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

    求建议
    RiverRay
        3
    RiverRay  
    OP
       62 天前   ❤️ 1
    @pfffs 可以用第三方帮你折腾

    国内推荐:authing 身份云
    国外:clerk 或者 supabase
    mqllin
        4
    mqllin  
       62 天前
    看了大佬的小故事茅塞顿开
    CHTuring
        5
    CHTuring  
       61 天前
    应该还少了个步骤,主动解除权限。
    evilcoming
        6
    evilcoming  
       61 天前
    膜拜
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1872 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:45 · PVG 08:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.