OAuth2客户端凭据流程-获取访问令牌的目的是什么?

时间:2018-10-30 21:36:32

标签: oauth oauth-2.0

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

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

我不清楚的是,为什么不仅将客户端ID和机密传递给API,然后通过API与身份验证服务器一起验证客户端ID和客户端机密是有效的,这种流程的意义更大?

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

2 个答案:

答案 0 :(得分:1)

使用令牌而不是发送clientID和密码的优势是:

  • 并非每次请求都发送秘密。如果令牌遭到破坏(即通过MITM攻击),则只能使用令牌直到令牌到期,例如15分钟后。 (顺便说一句,24小时令牌似乎很长,但这可能取决于用例)
  • 令牌还可以包含其他声明,例如授权范围等。

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

答案 1 :(得分:0)

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

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

在请求中对凭证使用不记名令牌可能是一个更好的选择,使您能够尽快受益于Token Binding