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

  • 授权码流 - 用户从客户端应用登录,授权服务器向应用返回授权码。然后应用程序交换访问 token 的授权代码。
  • 隐式授权流程 - 用户从客户端应用程序登录,授权服务器直接向客户端应用程序发出访问 token 。

  • 这两种方法在安全性方面有什么区别?哪个更安全,为什么?

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

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

    最佳答案

    access_token 是您调用 protected 资源(API)所需要的。在授权码流程中,有 2 个步骤可以获取:

  • 用户必须进行身份验证并向 API 使用者(称为“客户端”)返回 code
  • 该API的“客户”(通常为Web服务器)在#1获得的codeaccess_token交流,与client_idclient_secret
  • 认证本身
  • 然后它可以使用 access_token 调用 API。

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

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

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

    关于oauth - OAuth 授权代码和隐式工作流之间有什么区别?什么时候使用每一种?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16321455/

    10-13 08:02