最佳实践:将 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 一样的“值:值”。
我正在使用 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 一样的“值:值”。