【问题标题】:OAuth2 Client Credential flow - What is the purpose of getting an access token?OAuth2 客户端凭据流 - 获取访问令牌的目的是什么?
【发布时间】:2019-04-04 00:32:48
【问题描述】:

使用 OAuth2 客户端凭据流程,向 API 发出经过身份验证的请求有 2 个步骤:

  1. 使用 client idclient secret,向身份验证服务器发出请求。获取临时(即 24 小时)访问令牌。
  2. 使用从第 1 步检索到的 访问令牌,向 API 发出请求。 API 将通过身份验证服务器验证访问令牌是否有效。如果是,则接受请求。

我不清楚的是,为什么这个流程比仅仅将客户端 ID 和密码传递给 API,然后 API 使用身份验证服务器验证客户端 ID 和客户端密码是否有效更有意义?

在我的具体情况下,身份验证服务器和 API 属于同一家公司。

【问题讨论】:

    标签: oauth oauth-2.0


    【解决方案1】:

    使用令牌而不是发送 clientID 和 secret 的优点是:

    • 不是每个请求都发送密钥。如果令牌被泄露,即通过 MITM 攻击,那么它只能在过期之前使用,例如15分钟后。 (顺便说一句,24 小时令牌似乎很长,但可能取决于用例)
    • 令牌还可以包含其他声明,例如授权范围等。

    关于 iandayman 的回复,客户端不必每次都与 AuthServer 通信来验证令牌。客户端可以从 AuthServer 获取公钥,将其缓存并用于验证令牌及其声明。大多数图书馆可能会为您处理。

    【讨论】:

      【解决方案2】:

      在许多与您类似的 OAuth 场景中(即 Auth Server 和 Resource API 是同一家公司),资源服务器不需要联系 Auth 服务器来检查令牌是否有效。它可能只是验证令牌是由 Auth 服务器签名的,然后直接使用来自令牌的数据针对底层数据源,从而节省到 Auth 服务器的行程。

      但如果将客户端凭据传递给 API,则每次都需要连接到授权服务器以验证客户端凭据和范围是否仍然有效。

      在请求中使用不记名令牌而不是凭据可能是一个更好的调用,因为您将能够从Token Binding 中受益

      【讨论】:

        猜你喜欢
        • 2019-11-09
        • 2019-01-03
        • 1970-01-01
        • 2022-01-26
        • 2019-01-08
        • 2020-03-17
        • 2017-10-26
        • 2021-12-22
        • 1970-01-01
        相关资源
        最近更新 更多