小编典典

OAuth 授权代码和隐式工作流有什么区别?什么时候使用每一个?

all

OAuth 2.0 有多个工作流程。关于这两者,我有几个问题。

  1. 授权码流程 - 用户从客户端应用程序登录,授权服务器向应用程序返回一个授权码。然后,该应用程序将授权代码交换为访问令牌。
  2. 隐式授权流程 - 用户从客户端应用程序登录,授权服务器直接向客户端应用程序发出访问令牌。

就安全性而言,这两种方法有什么区别?哪个更安全,为什么?

当服务器可以直接发出访问令牌时,我看不出为什么在一个工作流程中添加了一个额外的步骤(交换令牌的授权代码)。

不同的网站说,当客户端应用程序可以保持凭据安全时,会使用授权代码流。为什么?


阅读 109

收藏
2022-07-29

共1个答案

小编典典

access_token就是您需要调用受保护的资源(API)。在授权码流程中有两个步骤来获取它:

  1. 用户必须进行身份验证并将其返回code给 API 使用者(称为“客户端”)。
  2. API 的“客户端”(通常是您的 Web 服务器)将code在 #1 中获得的信息交换为 a ,并access_token使用 aclient_idclient_secret
  3. 然后它可以使用access_token.

因此,有一个双重检查:拥有通过 API 显示的资源的用户和使用 API 的客户端(例如 Web 应用程序)。两者都经过验证以授予访问权限。请注意此处
OAuth 的“授权”性质:用户将对其资源的访问权限(通过code身份验证后返回)授予应用程序,应用程序获取的是 an
access_token,并代表用户调用。

在隐式流程中,省略了步骤 2。所以在用户认证之后,access_token直接返回一个,你可以使用它来访问资源。API 不知道谁在调用该
API。任何人都access_token可以,而在前面的示例中,只有 Web 应用程序可以(它的内部结构通常任何人都无法访问)。

隐式流通常用于不推荐存储的场景client idclient secret例如设备,尽管很多人都这样做)。这就是免责声明的意思。人们可以访问客户端代码,因此可以获得凭据并假装成为资源客户端。在隐式流中,所有数据都是易失的,应用程序中没有存储任何内容。

2022-07-29