我应如何以及在何处存储access_token(授权码授予)?

时间:2019-07-23 11:26:55

标签: oauth-2.0 jwt

我目前正在尝试为React Frontend应用程序设置服务器端。该服务器通过授权码授予auth流程与第三方API进行交互。当用户单击前端中的登录按钮时,它将重定向到服务器,该服务器将重定向到第三方的登录表单。然后,我将在服务器的回调路由处收到授权代码,并发出该代码以获取API资源调用的access_token。

当前,我的服务器通过将带有重定向URL的令牌传递给前端成功检索令牌后,将其重定向回到React应用程序。然后,我的前端将该令牌存储在本地存储中,并在发出请求时使用它。这些请求将发送到我的服务器端,这将从该第三方API返回请求的数据。

因此,我想那些并不是真正好的安全实践,我想对此进行改进。但是我在如何安全地存储API密钥以便可以重用的问题上感到困惑。

我的想法是,而不是直接传递API access_token,而是生成一个包含用户信息的JWT,然后将该令牌传递到授权标头中以供以后保护的路由使用。然后,当我的服务器验证该JWT时,它将使用当前的api access_token向API发出请求并返回数据。

但是我应该在哪里存储该access_token甚至应该存储它?还是有可能以加密形式将令牌包含在JWT中?另外,由于我仍然仅是原型制作,所以我现在暂时避免使用数据库来存储该简单信息。

2 个答案:

答案 0 :(得分:0)

  1. 请勿使用网址重定向access_token,这不安全see this POST
  2. 如果仅从服务器使用令牌,则不会将其传递给应用程序,但可以存储在服务器会话中。
  3. access_token包含 aud,iss,sub ,并且从第三个api获取的令牌不用于授权您的api。
  4. 在access_token内,第三个api生成(并向您发送)refresh_token
  5. 如果您要使用“来自第三方的身份验证” API,则可以检查它是否还发布了 id_token ,因此您可以使用它来将您的spa身份验证为API并使用(服务器端) access_token用于访问第三个api

答案 1 :(得分:0)

标准解决方案是让您的UI与调用API分开管理登录

因此,您的用户界面应直接与授权服务器对话-然后获取用于调用API的访问令牌

在这里查看我的帖子: https://authguidance.com/2017/09/26/basicspa-oauthworkflow/

最了解哪个方在发行令牌以及是否以标准方式完成令牌..