在 ASP.NET Core 2.1 Web 客户端中存储不记名令牌的位置
Posted
技术标签:
【中文标题】在 ASP.NET Core 2.1 Web 客户端中存储不记名令牌的位置【英文标题】:Where to store bearer token in ASP.NET Core 2.1 web client 【发布时间】:2018-12-06 21:40:03 【问题描述】:我正在编写一个三级应用程序。我有 ASP.NET Core 2.1 Api、Web 客户端应用程序和 android 应用程序。 Api 受 Jwt 授权保护。我在存储从 Api 获取的令牌到 Web 客户端时遇到问题。为此,我需要一种安全的方式,我正在考虑将其存储在ClaimsIdentity
中是否是一种好方法。我将在此处添加它:
var claims = new List<Claim>
new Claim(ClaimTypes.NameIdentifier, token.userId),
new Claim(ClaimTypes.Name, token.userName),
// Here add new Claim(ClaimTypes.Authentication, token.token)
;
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(principal);
这是正确且安全的方式吗?
【问题讨论】:
您反对使用 Localstorage 存储不记名令牌的想法吗? 我发现了类似 Secret Manager docs.microsoft.com/pl-pl/aspnet/core/security/… 的东西,但正如微软所说,它仅用于开发目的而不是生产目的。所以这不是一个好主意。也许我应该使用 Cookie 或 Session 变量? ClaimTypes.Authentication 可能不是这个地方 - 请参阅the docs。您可以添加自己的自定义声明,例如 new Claim("access_token", token.token) - 如果您采用这种方法,请确保您设置了 httponly 和安全标志。 auth0 有一些指导here 【参考方案1】:我终于找到了可以使用的东西。
https://hanssens.com/projects/localstorage
您可以使用此组件在内存中存储大量数据。它还具有加密模式,因此应该非常安全。再次感谢您的帮助!
【讨论】:
html5 Web 存储易受 XSS 攻击,具有较大的攻击面,并且可以影响所有应用程序用户成功攻击。您可以阅读这篇文章,stormpath.com/blog/…,其中讨论了 XSS 和 CSRF 攻击。 这个用户是特定的吗?我有一个从 REST Web 服务获取 JWT 令牌的 .net core 2.0 客户端。我希望令牌仅用于我当前的用户。还有另一种方法吗?谢谢【参考方案2】:我在 ASP.NET Core 2.1 中使用了 JwtBearer 授权 将其与手机连接....
我存储在前端的令牌... 比如手机……我把它存储在设置文件中……打开应用程序后 我检查该值是否存在或为空
如果存在...使用它发出请求 if Null ...请求一个新的令牌
在网络中...您可以将其存储在本地存储或 cookie 中
【讨论】:
您好,感谢您的回复。在 Android 中,您可以将其存储在例如数据库中。但是在 ASP 中它是不安全的以上是关于在 ASP.NET Core 2.1 Web 客户端中存储不记名令牌的位置的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.1 MVC - 无法设置从 Web api 响应接收到的 cookie
如何在 ASP.NET Core 2.1 中获取客户端 IP 地址
在 ASP.NET Core 2.1 Web API 中实现分页
Asp.net core 2.1 Web App 无法在 IIS 上正确呈现