在OAuth 2中,既然有授权码,为什么还需要一个访问令牌?

问题描述 投票:2回答:1

在OAuth 2中,客户端应用会用授权码换取一个访问令牌。而有了访问令牌,应用就可以进行API调用。然而,我并不明白为什么OAuth 2会有这一步,这似乎是一个额外的步骤。

我能想到的一个原因是,授权码是通过客户端的重定向调用给出的,所以它有可能被泄露,因此它的寿命很短;而访问令牌是服务器对服务器给出的。

这一点没错,但还有应用发送的秘密API密钥。那为什么授权码不能一样呢?

比如说没有访问令牌,只有授权码。那么即使有人拿到了授权码,如果OAuth服务器在检查授权码的同时也检查了秘钥,那么他们就什么都做不了了。

它应该允许OAuth服务器。

  1. 确保请求是由正确的应用程序发出的(认证)。
  2. 确定授予何种类型的许可(授权);
api oauth oauth-2.0 cryptography authorization
1个回答
0
投票

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

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

如果API所服务的资源是极其敏感的,那么你最多想要的是安全性,这是由授权码流提供的。在这种授予类型中,你在授予对资源的访问权之前,要对客户端(服务器端API或移动客户端)和资源所有者(用户)进行验证。access_token甚至不会暴露给浏览器用户(因为一个被盗的token可以给予资源访问权),从而提供了高度的安全性。这个流程很复杂,涉及到更多的往返授权服务器,但是,提供了更多的安全性。

如果您不需要资源的这种安全性,您可以使用隐式授予类型,浏览器用户可以访问令牌。这个流程很简单,只有一次访问授权服务器的机会。它不会对客户端进行验证。不需要在浏览器上保存客户端的秘密。

希望这能让你明白。如果你有任何问题,请告诉我。

谢谢你,Soma。

© www.soinside.com 2019 - 2024. All rights reserved.