在高层次上,OAuth 2如何工作?

据我了解,以下事件链发生在OAuth 2中,以便Site-A访问来自Site-B 用户信息。

  • Site-ASite-B上注册,并获得一个Secret和一个ID。
  • 用户告诉Site-A访问Site-B用户被发送到Site-B ,他告诉Site-B他确实想给Site-A许可特定信息。
  • Site-B用户重定向到Site-A以及授权码。
  • Site-A随后将该授权码及其秘密传递回Site-B以换取安全令牌。
  • Site-A随后通过捆绑安全令牌和请求,代表用户Site-B发出请求。
  • 所有这些在安全和加密方面如何在高层次上工作? OAuth 2如何防止使用安全令牌的重放攻击?


    OAuth 2.0如何在现实生活中运作:

    当我在窗户上看到最美味的甜甜圈时,我正在去奥拉夫的面包店开车上班 - 我的意思是,那东西正在滴下巧克力般的美味。 于是我走进去,问道:“我必须得那个甜甜圈!”。 他说“肯定会是30美元。”

    是的,我知道,一个甜甜圈30美元! 它一定很好吃! 突然间,我听到主厨大声喊道:“不!不要给你甜甜圈”。 我问:为什么? 他说他只接受银行转账。

    真的吗? 是的,他很认真。 我几乎走到那里,但是甜甜圈对我说:“吃我,我很好吃......”。 我是谁违反甜甜圈的命令? 我说了可以。

    他递给我一张带有他名字的便条(厨师,而不是甜甜圈):“告诉他们奥拉夫寄给你”。 他的名字已经在注释中,所以我不知道这是什么意思,但是没问题。

    我开车一个半小时到我的银行。 我把笔记交给出纳员。 我告诉她奥拉夫寄给我的。 她给了我一个这样的样子,那种说:“我可以读”。

    她拿着我的笔记,问我的身份证,问我可以给他多少钱。 我告诉她30美元。 她做了一些涂鸦,递给我另一张纸条。 这个人有一堆数字,我猜他们是如何跟踪笔记的。

    那时我正在挨饿。 我冲了出去,一个半小时后,我回来了,站在奥拉夫面前,我的笔记伸了出来。 他拿起它,看了看,说:“我会回来的”。

    我以为他得到我的甜甜圈,但30分钟后我开始怀疑。 于是我问柜台后面的人“奥拉夫在哪里?”。 他说“他去拿钱”。 “你什么意思?”。 “他注意到银行”。

    呃......所以奥拉夫接过笔记说银行给了我,然后回到银行去从我的账户里取钱。 既然他有银行给我的钞票,银行就知道他是我所说的那个人,而且因为我跟他们所知道的银行交谈过,只给他30美元。

    我一定花了很长时间才弄清楚,因为当我抬头时,奥拉夫站在我面前,最后把我的甜甜圈递给我。 在我离开之前,我不得不问:“奥拉夫,你是否总是这样卖甜甜圈?”。 “不,我曾经做过不同的事情。”

    呵呵。 当我回到我的汽车时,我的手机响了。 我没有打扰回答,这可能是我的工作要求解雇我,我的老板是这样的。 此外,我被卷入思考我刚刚经历的过程。

    我的意思是考虑一下:我可以让Olaf从我的银行账户中扣除30美元,而无需向我提供我的账户信息。 我不必担心他会拿出太多钱,因为我已经告诉银行他只能拿到30美元。 银行知道他是正确的人,因为他有我们给奥拉夫的笔记。

    好吧,我确定我宁愿从他口袋里拿出30美元。 但现在他有了这张纸条,我可以告诉银行让他每周花30美元,然后我可以出现在面包店,我不必再去银行了。 如果我愿意,我甚至可以通过电话订购甜甜圈。

    当然,我绝对不会这么做 - 那个甜甜圈真恶心。

    我想知道这种方法是否有更广泛的应用。 他提到这是他的第二种方法,我可以称之为Olaf 2.0。 无论如何,我最好回家,我必须开始寻找新的工作。 但是,在我从镇上那个新地方得到草莓奶昔之一之前,我需要一些东西来冲洗那个甜甜圈的味道。


    根据我读过的内容,这是如何工作的:

    问题中概述的一般流程是正确的。 在步骤2中,用户X被认证,并且还授权站点A访问用户X在站点B上的信息。在步骤4中,站点将其秘密传递回站点B,自我认证以及授权码,指示什么它要求(用户X的访问令牌)。

    总体而言,OAuth 2实际上是一个非常简单的安全模型,加密永远不会直接发挥作用。 相反,秘密和安全令牌本质上都是密码,并且整个事情仅由https连接的安全性来保护。

    OAuth 2没有保护安全令牌或秘密的重放攻击。 相反,它完全依赖站点B负责这些项目,并且不让他们离开,并且在传输时通过https发送(https将保护URL参数)。

    授权代码步骤的目的很简单,授权代码本身并不特别敏感。 当为用户X的访问令牌询问站点B时,它为站点A的用户X的访问令牌提供公共标识符。 只要用户X在B站点上的用户标识不起作用,因为可能有许多未完成的访问令牌同时等待分发到不同的站点。


    OAuth是一种协议,通过该协议,三方应用可以访问存储在另一个网站中的数据,而无需使用您的帐户和密码。 有关更多官方定义,请参阅Wiki或规范。

    这是一个用例演示:

  • 我登录LinkedIn并希望连接Gmail联系人中的一些朋友。 LinkedIn支持这一点,所以我点击这个按钮:
    添加连接

  • 当我输入我的帐户和密码时,弹出一个网页,并显示Gmail登录页面:
    添加连接

  • 然后,Gmail会显示一个同意页面,我点击“接受”: 添加连接

  • 现在LinkedIn可以访问Gmail中的我的联系人: 添加连接

  • 以下是上述示例的流程图:

    添加连接

    第1步:LinkedIn从Gmail的授权服务器请求令牌。

    第2步:Gmail授权服务器验证资源所有者并向用户显示同意页面。 (如果用户尚未登录,用户需要登录Gmail)

    第3步:用户授予LinkedIn访问Gmail数据的请求。

    第4步:Gmail授权服务器使用访问令牌回应。

    第5步:LinkedIn使用此访问令牌调用Gmail API。

    第6步:如果访问令牌有效,Gmail资源服务器会返回您的联系人。 (令牌将由Gmail资源服务器验证)

    您可以在此处了解有关OAuth的详细信息。

    链接地址: http://www.djcxy.com/p/47983.html

    上一篇: On a high level, how does OAuth 2 work?

    下一篇: What does "offline" access in OAuth mean?