首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问令牌和刷新令牌的存储位置和存储方式

访问令牌和刷新令牌的存储位置和存储方式
EN

Stack Overflow用户
提问于 2019-06-11 19:20:29
回答 4查看 5.2K关注 0票数 3

我有一个dotnet core2.2MVC web应用程序,它使用web api来执行一些数据库查询。我已经为web api实现了基于JWT令牌的身份验证。在api处生成令牌,并且web应用已经接收到访问令牌、期满和刷新令牌。我需要将此令牌详细信息存储在我的客户端,以便我可以使用它来访问web api(在过期之前),或者在令牌过期时使用刷新令牌生成新的令牌。

在这方面的任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2020-09-23 17:44:41

以前的答案没有对使用这些解决方案的原因提供清晰的解释。

典型的系统如下图所示,WEB中使用了两种常见的客户端应用程序架构:

在浏览器中运行的

  • 单页应用程序
  • 服务器端MVC应用程序

在SPA的情况下,令牌存储在浏览器(会话存储或本地存储)中,到期时由浏览器或应用程序本身自动清除。仅供参考,由于安全原因,无法在SPA中获取刷新令牌。

对于MVC应用程序(您的情况),事情会变得更加复杂。您有两个选择:要么将其存储在仅http-only cookie中,要么存储在某个外部会话存储中。Aspnet核心支持这两种情况,但每种情况都有警告。A good article here。简而言之,如果您关心cookie的大小,那么使用分布式会话存储会增加系统架构的复杂性。除此之外,cookies是最简单的解决方案,并且在aspnet核心中默认启用,您只需设置options.StoreTokens = trueoptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme即可。

票数 2
EN

Stack Overflow用户

发布于 2019-06-11 20:12:33

有多种方法可以存储令牌。通常,应用程序不会将访问令牌存储在任何地方,但它们确实会将刷新令牌存储在永久存储中。

让我们看看你需要在web和api端存储什么。

首先,用户将使用凭据请求登录web应用程序,web应用程序将此请求传递到api项目-该项目与数据库交互。

现在,api将生成访问令牌,并将刷新令牌和保存刷新令牌发送到该数据库。然后,Web api需要将访问令牌和刷新令牌存储在临时存储中,如cookie或会话。

当访问令牌过期时,您需要调用一个新的令牌,这将更新数据库中的前一个刷新令牌。

TL;DR

刷新令牌数据库

访问令牌和刷新令牌- web临时存储

票数 1
EN

Stack Overflow用户

发布于 2019-06-12 12:10:09

您有多种选择(安全的http-only cookie、本地存储、会话存储等)。

在最简单的场景中,您可以将其存储在cookie中,以便与每个请求一起发送:

  • cookie应始终具有HttpOnly标志以防止浏览器中的Secure攻击。
  • cookie还应在生产中使用Secure标志,以确保仅通过HTTPS发送cookie。
  • 保护您的表单免受Secure攻击(例如,通过使用ASP.NET核心的AntiForgery功能)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56542579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档