【问题标题】:Where to store bearer token in ASP.NET Core 2.1 web client在 ASP.NET Core 2.1 Web 客户端中存储不记名令牌的位置
【发布时间】: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

标签: c# asp.net-core jwt token


【解决方案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 中它是不安全的
猜你喜欢
  • 2021-02-03
  • 2014-03-19
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 2020-12-21
  • 2020-03-13
  • 2016-09-25
  • 2020-03-20
相关资源
最近更新 更多