gpt4 book ai didi

laravel - 存储外部访问/刷新 token

转载 作者:行者123 更新时间:2023-12-02 19:12:21 24 4
gpt4 key购买 nike

我创建了一个 Laravel 应用程序,它请求我的用户使用 oAuth(授权代码)访问外部应用程序。一切顺利,我可以将外部应用程序连接到我的用户帐户。但是,外部 API 为我提供了访问和刷新 token 。访问 token 显然会过期,而刷新 token 不会。

一旦用户授予我访问权限,我需要将这些 token 存储在某处。特别是刷新 token 。一旦访问 token 过期,我需要刷新访问 token 。我的“问题”是,我不太确定在哪里存储这些 token 。我想到了几个选择:

  • 将加密 token 存储在与用户关联的数据库中
  • 将它们存储在缓存中
  • 将它们存储在Redis数据库中
  • ...

有很多选择,但我正在寻找最安全的一个。将加密 token 存储在数据库中并不是我最喜欢的选择,但却是最持久的选择。缓存可以被有意或无意地清除。清除缓存后,我需要用户再次授予我访问其帐户的权限。

存储这些凭据的最佳方式是什么?

最佳答案

安全

What's the best way of storing these credentials?There are many options, but I'm looking for the safest one.

无论您将其存储在何处,始终以加密格式进行。这样即使泄露了它们也不能被重复使用,除非加密 key 也被泄露。

刷新 token 持久性

Storing the encrypted tokens in the database isn't my favorite choice, but the most persistent one.

您可以使用 session 、JWT token 或直接进入数据库来完成此操作。让我们看看选项...

Laravel session

如果您在 Laravel 应用程序中使用用户 session ,您可以将其加密存储在每个用户的 session 中。

Laravel Sessions

Since HTTP driven applications are stateless, sessions provide a way to store information about the user across multiple requests. Laravel ships with a variety of session backends that are accessed through an expressive, unified API. Support for popular backends such as Memcached, Redis, and databases is included out of the box.

Laravel 还支持将 session 存储在加密的 cookie 中。

JWT token

如果您使用 JWT token ,那么您可能正在使用 JWS token ,那么如果是这样,请将其加密存储在 JWS 声明中,甚至更好,使用 JWE token 。

JWT token 中的声明是 JWT token 有效负载中的键/值对。 JWT token 由 header.payload.signature 组成。有效负载示例:

{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

JWS

A JSON Web Signature (abbreviated JWS) is an IETF-proposed standard (RFC 7515) for signing arbitrary data.[1] This is used as the basis for a variety of web-based technologies including JSON Web Token.

JWE

JSON Web Encryption (JWE) is an IETF standard providing a standardised syntax for the exchange of encrypted data, based on JSON and Base64.[1] It is defined by RFC7516. Along with JSON Web Signature (JWS), it is one of the two possible formats of a JWT (JSON Web Token). JWE forms part of the JavaScript Object Signing and Encryption (JOSE) suite of protocols.

您可以在 https://jwt.io/introduction 了解有关 JWT 的更多信息。

数据库

使用对您来说更方便的数据库,即您的应用程序中已有的数据库。不要仅仅为了存储刷新 token 而引入 Redis,但如果您已经使用了 Redis,那么它可以作为替代方案,但我只是将其加密存储在您已经存储用户信息的数据库中。毕竟刷新 token 并不是您在每个请求中都执行的操作,因此性能在这里可能不是那么重要。

关于laravel - 存储外部访问/刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64066894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com