1

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

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

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

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

4

2 回答 2

1

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

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

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

于 2020-05-26T17:37:47.550 回答
1

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

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

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

于 2018-11-01T21:28:19.633 回答