首页 > 解决方案 > 为什么检索访问令牌是 OAuth2 中带有额外 HTTP 请求的单独步骤?

问题描述

在学习 OAuth2 的工作原理时,我无法弄清楚为什么有一个单独的步骤来检索访问令牌?

单独的步骤意味着:

我希望访问令牌在“授权”步骤中生成,使用客户端密码加密,并在重定向到回调 URL 时返回。然后客户端应用程序将解密它并直接使用它等待而不发出额外的 HTTP 请求。

我想有一个额外的步骤背后有一些原因,我只是不知道它们。我希望你能在你的回答中解释原因。

标签: oauth-2.0

解决方案


我假设您在谈论授权代码流而不是隐式流,它确实直接返回了一个令牌。

授权代码流程旨在通过回调 URL 与可能未加密的服务器一起使用(这是在 Let's Encrypt 和相对较新的 encrypt-everything 推送之前设计的)。因此,该 URL 可能被任何中间路由器/代理拦截,并且在该环境中发送访问代码作为回调 URL 的一部分是一个坏主意。

因此,而是发送了授权代码。然后客户端将授权代码连同其客户端密码交换为访问令牌。授权码可以被截获,但是在授权码流程中,客户端的秘密实际上是秘密的,在你的服务器之外是不知道的,所以任何截获的授权码本身是没有用的。

如今,加密很常见且免费,强烈建议不要使用未加密的流。由于历史原因,额外的调用仍然是授权代码流的一部分。


推荐阅读