在OAuth 2中,为什么在有授权码时需要访问令牌?

时间:2016-05-26 01:27:17

标签: api oauth cryptography authorization oauth2

App交换访问令牌的授权码。并且使用访问令牌应用程序可以进行api调用。但是,我真的不明白为什么OAuth 2有这一步,似乎是一个额外的步骤。

我发现的一个原因是授权代码是通过客户端的重定向调用给出的,因此它有可能被泄露,因此它很短暂。而服务器向服务器提供访问令牌。

这是真的,但是,还有App发送的Secret Api密钥。那为什么不能用授权码做同样的事。

假设没有访问令牌,只有授权。然后,如果有人甚至获得授权代码,如果Oauth2服务器也在授权代码中检查了密钥,他们将无法做任何事情。

它应该允许Oauth服务器:

  1. 确保请求由app(authenticate)
  2. 提出
  3. 授予了哪些类型的权限(授权)

1 个答案:

答案 0 :(得分:0)

在浏览器中运行的JavaScript客户端或Web应用程序的情况下,需要能够直接获取access_token(隐式授权类型)。因为,根据可用于保存客户端密钥的选项,这些客户端不安全。客户端ID和密钥需要交换access_token的授权代码。

这两种授权类型的存在是为了在实现身份验证时提供各种级别的安全性。

如果API提供的资源非常敏感,那么您最多需要安全性,这是由授权代码流提供的。在此授权类型中,您在授予对资源的访问权限之前验证客户端(服务器端API或移动客户端)和资源所有者(用户)。 access_token甚至没有暴露给浏览器/用户(因为被盗的令牌可以提供对资源的访问),因此提供了高度的安全性。此流程很复杂,涉及到授权服务器的更多往返,但提供更高的安全性。

如果您不需要资源上的这种安全性,则可以使用隐式授权类型,其中浏览器/用户可以访问该令牌。这个流程很简单,只需要一次授权服务器。它不会验证客户端。无需使用浏览器保存客户端密码。

希望这是有道理的。如果您有任何问题,请与我们联系。

谢谢你, 索玛。