oAuth 2 如何工作?

Posted

技术标签:

【中文标题】oAuth 2 如何工作?【英文标题】:How oAuth 2 works? 【发布时间】:2016-03-27 15:29:36 【问题描述】:

我已经通过On a high level, how does OAuth 2 work?,但我还有一些具体的 质疑 oauth 2 的工作原理

以下是来自所述链接的 oAuth 的步骤顺序

    Site-A 向 Site-B 注册,并获得一个 Secret 和一个 ID。

    当用户告诉站点 A 访问站点 B 时,用户会被发送到站点 B,在那里他告诉站点 B 他确实想授予站点 A 访问特定信息的权限。

    站点 B 将用户重定向回站点 A,并附上授权代码。

    然后站点 A 将该授权代码连同其秘密一起传递回站点 B,以换取安全令牌。

    站点 A 然后通过将安全令牌与请求捆绑在一起来代表用户向站点 B 发出请求。

我的问题是关于以下几点:-

1) 身份验证:- 哪个步骤以及它是如何发生的。没有人解释这里的身份验证实际上是如何发生的

My Understanding on this point:- 来自William Jones 的答案看起来好像发生在第 2 步。如果是,它是如何发生的?我相信它发生在 cookie 的帮助(如果用户已经登录并且如果没有服务,则当从相同的浏览器实例(如基于 java 的应用程序的 jsessionid)点击 url 时自动发送 提供者明确要求提供凭据)。对吗?

2) 授权码:- 我不确定这里的使用授权码有什么用。为什么站点 B 不能立即提供安全令牌。 我的意思是为什么步骤 4 和步骤 2 不能合并,其中 sita 通过 cookie 提供密码和经过身份验证的数据,而站点 B 提供安全令牌

3) 安全/访问令牌:- 我的理解是,一旦安全令牌被共享,站点 B 将仅基于此共享信息。假设站点 A 从站点获得安全令牌编号为 100 B 代表用户 X。现在如果站点 A 的用户 Y 获得一些安全令牌(我明白 它可能无法在 SSL 上嗅探它),然后他可以访问用户 X 的公共信息

【问题讨论】:

【参考方案1】:

您似乎正在描述一种称为授权代码流的协议流。

OAuth 2.0 中有四个“Actor”。

资源所有者 -(最终用户) OAuth 客户端(WEB 应用程序) 授权服务器为资源所有者和资源提供便利 服务器和颁发令牌(可能与资源服务器相同的服务器) 资源服务器 - 持有受保护的资源(由资源拥有 所有者)

通常 OAuth 客户端、授权服务器和资源服务器都在同一台机器上或在同一域中。 OAuth 2.0 并未真正指定授权服务器和资源服务器之间的通信方式。

1) 身份验证:- 哪个步骤以及它是如何发生的。没有人 解释了身份验证实际上是如何发生的 记住OAuth 2.0 is not an authentication protocol.

2) 授权码 您的步骤定义不明确。尝试通过图片查看Grant Type: Authorization Code。

3) 安全/访问令牌 不共享。由授权服务器发布并通过 OAuth 客户端呈现给资源服务器。

【讨论】:

对于第 1 点,这是我的问题:-*** 使用 facebook oauth 进行身份验证/授权?当我在 facebook 上登录时,我可以直接登录到 SO(我只需要说我想使用 FB 登录),当我没有登录 FB 时,它会询问我的凭据。所以我想了解那个过程。我相信它发生在第 2 步。我不确定它是 oauth 的一部分还是某些单独的协议? @jwillwkw 查看我的相关问题meta.stackexchange.com/questions/271623/…。如果你能回答,那就更清楚了

以上是关于oAuth 2 如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 刷新令牌如何在客户端工作?

Spring security 4.2.3,OAUTH 2,/oauth/token 端点,CORS 不工作

OAuth 2.0验证面试+工作

如何在 git push 上解决“拒绝允许 OAuth 应用程序创建或更新工作流”

任何工作示例如何使用登录表单和 github 设置 oauth2 授权服务器?

当我的本地域未在 Yahoo 注册时,我如何在本地开发时让 Yahoo OAuth 工作?