我有一个dotnet core2.2MVC web应用程序,它使用web api来执行一些数据库查询。我已经为web api实现了基于JWT令牌的身份验证。在api处生成令牌,并且web应用已经接收到访问令牌、期满和刷新令牌。我需要将此令牌详细信息存储在我的客户端,以便我可以使用它来访问web api(在过期之前),或者在令牌过期时使用刷新令牌生成新的令牌。
在这方面的任何帮助都将不胜感激。
发布于 2020-09-23 17:44:41
以前的答案没有对使用这些解决方案的原因提供清晰的解释。
典型的系统如下图所示,WEB中使用了两种常见的客户端应用程序架构:
在浏览器中运行的
在SPA的情况下,令牌存储在浏览器(会话存储或本地存储)中,到期时由浏览器或应用程序本身自动清除。仅供参考,由于安全原因,无法在SPA中获取刷新令牌。
对于MVC应用程序(您的情况),事情会变得更加复杂。您有两个选择:要么将其存储在仅http-only cookie中,要么存储在某个外部会话存储中。Aspnet核心支持这两种情况,但每种情况都有警告。A good article here。简而言之,如果您关心cookie的大小,那么使用分布式会话存储会增加系统架构的复杂性。除此之外,cookies是最简单的解决方案,并且在aspnet核心中默认启用,您只需设置options.StoreTokens = true
和options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme
即可。
发布于 2019-06-11 20:12:33
有多种方法可以存储令牌。通常,应用程序不会将访问令牌存储在任何地方,但它们确实会将刷新令牌存储在永久存储中。
让我们看看你需要在web和api端存储什么。
首先,用户将使用凭据请求登录web应用程序,web应用程序将此请求传递到api项目-该项目与数据库交互。
现在,api将生成访问令牌,并将刷新令牌和保存刷新令牌发送到该数据库。然后,Web api需要将访问令牌和刷新令牌存储在临时存储中,如cookie或会话。
当访问令牌过期时,您需要调用一个新的令牌,这将更新数据库中的前一个刷新令牌。
TL;DR
刷新令牌数据库
访问令牌和刷新令牌- web临时存储
发布于 2019-06-12 12:10:09
您有多种选择(安全的http-only cookie、本地存储、会话存储等)。
在最简单的场景中,您可以将其存储在cookie中,以便与每个请求一起发送:
HttpOnly
标志以防止浏览器中的Secure
攻击。Secure
标志,以确保仅通过HTTPS发送cookie。Secure
攻击(例如,通过使用ASP.NET核心的AntiForgery功能)。https://stackoverflow.com/questions/56542579
复制相似问题