asp.net-core-mvc - 访问令牌和刷新令牌的存储位置和方式
问题描述
我有一个 dotnet core 2.2 MVC web 应用程序,它使用 web api 来执行一些数据库查询。我已经为 web api 实现了基于 JWT 令牌的身份验证。令牌在 api 处生成,Web 应用程序已收到访问令牌、到期令牌和刷新令牌。我需要将此令牌详细信息存储在我的客户端,以便我可以使用它来访问 web api(到期前)或在令牌过期时使用刷新令牌生成新令牌。
对此的任何帮助将不胜感激。
解决方案
以前的答案没有提供关于使用这些解决方案的原因的明确解释。
典型系统如下图所示,WEB 中使用了两种常见的客户端应用程序架构:
- 在浏览器中运行的单页应用程序
- 服务器端 MVC 应用程序
在 SPA 的情况下,令牌存储在浏览器(会话存储或本地存储)中,并在到期时由浏览器或应用程序本身自动清除。仅供参考,由于安全原因,在 SPA 中无法获取刷新令牌。
如果是 MVC 应用程序(您的情况),事情会变得更加复杂。您有两个选择:将其存储在仅 http cookie 或某些外部会话存储中。Aspnet 核心支持这两种情况,但每种情况都有一些警告。这里有一篇好文章。简而言之,如果您担心 cookie 大小,请使用分布式会话存储,这会增加系统架构的复杂性。否则 cookie 是最简单的解决方案,并且在 aspnet 核心中默认启用,您只需设置options.StoreTokens = true
和options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme
.
推荐阅读
- jql - 如何在 JIRA 中搜索文本字段的多个可能值
- gulp - Eslint --fix 抑制错误但实际上并没有更改文件
- python - 使用 Hive 元数据读取 HDFS 文件 - Pyspark
- java - 如何动态地将项目添加到列表视图
- windows - 如何撤消 .bat 文件
- css - rvest 错误 - 强制引入的 NA(xpath 和 css)
- php - 属性“num_rows”是非对象?
- mysql - 连接三个表并在 MySQL 中查找付款总和
- python - Python从每个内部列表中获取第二项
- javascript - 在 Typescript 中使用 Object.keys 时避免隐式“任何”类型