在高层次上,OAuth 2如何工作?
据我了解,以下事件链发生在OAuth 2中,以便Site-A
访问来自Site-B
用户信息。
Site-A
在Site-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