最佳实践:将 Twitter 访问令牌发送到服务器

Best practice: Sending Twitter access token to server

我正在使用 NextAuth 来登录使用 Twitter 的用户。这很好用,我在客户端收到了 AccessToken 和 Token Secret。但是我需要在服务器端查询 Twitter API 以获取登录的用户个人资料信息。因此我需要在每次请求时向服务器提交 AccessToken 和 Token Secret。

我是否应该将 AccessToken 和 Token Secret 组合成一个字符串并将其作为 Authorization Header 参数的一部分发送并在服务器端解析?

安全方面,将访问令牌信息发送到服务器的推荐方式是什么?

我不知道是否有最佳实践,但我想说有些想法会反对某些可用的解决方案。

首先,从术语的角度来看,使用授权 header 似乎是对其定义目的的滥用 (RFC 7235):

"... allows a user agent to authenticate itself with an origin server"

并且:

"Its value consists of credentials containing the authentication information of the user agent for the realm of the resource being requested."

在这种情况下,这不是您正在做的 - 提供的凭据不是针对请求的资源(而是操作),而是请求的操作所需的信息。

其次,我不会在路径中包含任何凭据,因为从日志记录的角度来看,通常不将其视为敏感信息。

既然您考虑的是安全性,我就假设您正在使用您的函数强制执行 HTTPS。我还假设您正在使用 HttpTrigger,因为您说您需要在每个请求中发送凭据。

在我看来,您有 3 个选择:

  • 放入自定义header(不是授权)
  • 将其作为查询参数
  • 放在body

3 个人指南:

  • Header 值作为与不适合作为查询的请求关联的“元”(或在 URL 中)。
  • 查询参数作为与 resource/action 关联的参数化“元”。
  • Body 作为用于处理操作的信息(例如,要创建的资源的状态)。

所以...我会把它放在 body.

所有 3 个选项都是安全的(或者说,与配置的服务器一样安全)。我最好的猜测是 body 是服务器上记录最少的信息。主要是因为 body 的大小可能有很大差异,如果要记录所有请求主体,将会占用很多 space。有些服务器可能会记录完整的 URL(包括查询参数),这绝对是一个需要考虑的问题。我不知道 Azure 是否在“幕后”为 Functions 做这件事。该路径可通过 Application Insights 以明文形式提供,据我所知,查询参数未在任何地方显示,除非实施明确写入日志。

无论如何,base64 编码信息可能是最后的“良好做法”步骤,无论您的选择如何,例如像 BasicAuth 一样的“值:值”。