oauth-2.0 - 为什么检索访问令牌是 OAuth2 中带有额外 HTTP 请求的单独步骤?
问题描述
在学习 OAuth2 的工作原理时,我无法弄清楚为什么有一个单独的步骤来检索访问令牌?
单独的步骤意味着:
- 提取 HTTP 请求
- 在 URL 中传递 Client Secret
我希望访问令牌在“授权”步骤中生成,使用客户端密码加密,并在重定向到回调 URL 时返回。然后客户端应用程序将解密它并直接使用它等待而不发出额外的 HTTP 请求。
我想有一个额外的步骤背后有一些原因,我只是不知道它们。我希望你能在你的回答中解释原因。
解决方案
我假设您在谈论授权代码流而不是隐式流,它确实直接返回了一个令牌。
授权代码流程旨在通过回调 URL 与可能未加密的服务器一起使用(这是在 Let's Encrypt 和相对较新的 encrypt-everything 推送之前设计的)。因此,该 URL 可能被任何中间路由器/代理拦截,并且在该环境中发送访问代码作为回调 URL 的一部分是一个坏主意。
因此,而是发送了授权代码。然后客户端将授权代码连同其客户端密码交换为访问令牌。授权码可以被截获,但是在授权码流程中,客户端的秘密实际上是秘密的,在你的服务器之外是不知道的,所以任何截获的授权码本身是没有用的。
如今,加密很常见且免费,强烈建议不要使用未加密的流。由于历史原因,额外的调用仍然是授权代码流的一部分。
推荐阅读
- python - 如何通过 Ajax 加载 Django ListView
- javascript - 获取下拉菜单以在汉堡菜单的内部/外部工作
- deep-learning - 大量的训练步骤导致迁移学习表现不佳
- typescript - 使用构造函数在 Typescript 类中将字符串转换为数字的优雅方法?
- entity-framework-core - datetime2 的 EF 核心约定
- c# - Why is textbox.Text returning an empty string?
- python - 根据组的长度拆分和更改 pandas 'groupby' 元素的值
- python - 如何使用 jsonschema 在字典中查找违反模式的键
- java - 我应该让这个类级别的变量更本地化吗?
- php - 将提要拉到另一个站点时从 RSS 提要描述中删除图像