繁体   English   中英

在 ASP.NET 应用程序中将身份验证令牌存储到另一个系统的位置

[英]Where to store auth token to another system in ASP.NET application

我有一个向客户端提供文档的 ASP.NET Web 应用程序。 该文档可以在一个“单独的”系统中。 要从该系统获取文档,我需要登录,然后它返回一个令牌,然后我在向它发出的每个请求中使用该令牌。 (该系统的凭据不依赖于我的应用程序的当前用户,我只有固定的用户名和密码)

我想避免每次请求文档时都登录,而是更愿意在内部存储令牌(它在一个小时后过期)。

存储这种变量的推荐方法是什么?

不鼓励使用静态变量,使用Session只会为用户存储票证。

我认为您拥有的是应用程序身份验证,而不是用户应用程序身份验证。 在这种情况下,如何将令牌保存在 1 小时到期的缓存中? 因此,每当系统尝试读取令牌时,请先尝试从缓存中获取值。 如果它是空的——这意味着它是第一次登录或过期的缓存——命中认证服务,获取令牌并将其保存到缓存中。

可能在负载平衡的环境中,您最终可能会发现每台服务器都有不同的令牌,我认为这对您来说很好。 否则,您可能需要考虑诸如 Redis 缓存之类的东西。

正如 Josh 在上面的评论中建议的那样,将令牌存储在数据库中将是更好的选择。

如何刷新该令牌是您需要做出的选择。

您可以在旧令牌到期 5 分钟前通过运行服务或作业请求新令牌。 您的 Web 应用程序将仅使用新令牌来检索文档。

此外,您的 Web 应用程序可以刷新令牌。 每当它使用数据库中的令牌时,它可以检查是否过期,如果令牌在接下来的 5 分钟内过期,应用程序可以更新/刷新令牌并将具有新过期时间的新令牌存储在数据库中,并使用它来检索文档。

如果存储在数据库中太复杂,那么您可以考虑将令牌和到期时间存储在 Web 服务器本身的临时文件中,并使用上述两种方法中的任何一种来刷新令牌。 不同之处在于,令牌存储在文件中而不是数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM