从 Discord OAuth 存储访问令牌的正确方法

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

我正在为我的 Discord 机器人编写仪表板。前端是我使用 SolidJS 制作的 SPA 应用程序,该应用程序的后端(用于调用我的 API,用于获取各种用户数据)是一个快速的 NodeJS 服务器。

我当前的流程是这样的:使用生成的 discord oauth 授权链接发布客户端代码(通过单击我的应用程序中的登录按钮),将从浏览器应用程序接收到的代码发送到我的 API(使用 /auth/login 路由),调用后端的 Discord API 用于接收不记名访问令牌,将访问令牌按原样存储在 cookie 中,并使用存储在 cookie 中的此令牌进行从前端到后端的调用,并将访问令牌设置为授权标头。

我需要在每次调用时发送令牌,因为我需要在使用 Discord API(如 users/@me 或 users/@me/guilds)处理任何请求之前对用户进行身份验证,然后在身份验证成功后处理请求.

明显的问题是我在每次 API 调用时发送实际的 Discord 访问令牌,它没有加密或任何东西。但我不知道我还能如何存储这个令牌,以便能够通过 API 调用将它发送到后端。

我的问题是:处理以这种方式使用的令牌的正确方法是什么?将令牌附加到授权标头中的每个调用的方法是否正确?

将授权代码发送到后端然后接收访问令牌的方法是否正确,或者前端应该调用访问令牌本身(在这种情况下,应该如何存储/保护它)?

rest oauth authorization single-page-application access-token
1个回答
0
投票

我想你可以看看这些选项:

  1. 既然是你的后端获取discord access token,然后向discord发送API请求,我觉得你可以把access token放在后端。您可以与前端建立 HTTP 会话,然后将不和谐访问令牌与会话 ID 一起保存在数据库中。然后,当您从前端收到请求时,您可以轻松地使用该令牌——后端从会话 cookie 中获取会话 ID,然后从数据库中读取不和谐令牌,并对不和谐进行 API 调用。

  2. 如果你不想维护一个单独的数据库,你仍然可以将你的 discord 令牌保存在 cookie 中,但要确保它们是 HTTP-only cookie,并且你使用从前端到后端的安全连接(使用 HTTPS ). cookie 将在每次请求时发送到您的后端,然后后端可以从 cookie 中获取令牌并调用 discord API。这个解决方案非常安全,因为 cookie 在传输过程中(通过使用 SSL)和 XSS 攻击(因为 HTTP-only cookie 无法被脚本读取)受到保护。

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