【问题标题】:How should i secure my Web Application(ASP.Net Core 3.1 MVC)?我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?
【发布时间】:2021-05-17 20:02:05
【问题描述】:

我最近有了编写自己的网络应用程序的想法,其功能将在稍后决定。 我实现了一个 ASP.NET Core 3.1 Web Api=> api 的用途 => 为我的应用程序验证用户。

它有端点像 => 登录(这里用户将通过 ef core sql 等进行身份验证),refreshtoken, 还在思考“注销”端点是否有用? expireson=15min 对于 jwt 令牌是否足够?

这个 api 将用于我计划的许多不同的项目。 但我遇到了问题,我应该如何处理我的网络应用程序上的实施。 我应该对我的 api 进行 api 调用 => 获取令牌 => 然后它只是空白。我不知道下一步该怎么走

你能帮我一些建议吗?

【问题讨论】:

标签: c# asp.net-core authentication jwt asp.net-core-webapi


【解决方案1】:

它有像 => login 这样的端点(这里用户将被认证 用ef core sql等),refreshtoken,还在琢磨如果a “注销”端点有用吗? expireson=15min 对于 jwt 令牌是否足够?

对于注销端点和令牌过期时间,这取决于您的要求。通过注销端点,我们可以清除当前用户的身份信息或个人数据。过期时间可自行设置。

我是否应该对我的 api 进行 api 调用 => 获取令牌 => 然后它只是 空白的。我不知道下一步该怎么走

没有任何示例代码或错误消息,很难缩小问题范围。因此,最好发布足够的代码来重现问题,如Minimal, Complete, and Verifiable example

一般来说,当我们使用 JWT 认证时,工作流程如下:

  1. 客户端向服务器发送请求(包含用户信息,如:用户名和密码)获取token
  2. 服务器接收用户信息并检查授权。如果验证成功,服务器会生成一个 JWT 令牌。
  3. 客户端收到令牌并将其存储在本地某处。
  4. 客户端在以后的请求中发送令牌。
  5. 服务器从请求标头中获取令牌,再次计算哈希,方法是使用 a) 令牌中的标头 b) 令牌中的有效负载 c) 服务器已经拥有的密钥。
  6. 如果 ("newly computed hash" = "hash come in token"),则 token 有效,否则它被调和或无效

配置后,您的应用程序使用Asp.net core Identity 和 JWT 身份验证。当用户登录时,您可以将用户信息发送到服务器端并检查当前用户是否有效,然后生成 JWT 令牌,在客户端您可以将令牌存储在 Web 存储中。之后,当您想通过将此令牌传递给身份验证 HTTP 标头来访问资源时。

更多关于使用JWT令牌的详细信息,请参考以下文章:

JWT Authentication In ASP.NET Core

ASP.NET Core 3.1 API - JWT Authentication with Refresh Tokens

【讨论】:

  • 感谢您的评论和添加的链接。我最近对 ​​jwt auth 等进行了很多研究,通常说 jwt 作为一种身份验证方法并不是那么好 => 因为用户向 jwt auth web api 发送每个操作的请求,并且它使用带宽等,并且操作有crud 函数需要更多时间。我的方法是否仍然可行并且是构建应用程序的好方法?还是我应该更改我的身份验证和授权系统。
  • 是的,通过使用 JWT 身份验证,它包含优点和缺点。 JWT 就像是景点的门票。它包含服务器需要嵌入其中的所有安全信息。一旦服务器将其分发出去,客户端只需要在它请求某些东西时呈现它,并且如果它是有效的,服务器会做出相应的响应,这是完全可以接受的,您不会注意到它有任何延迟。因此,它通常适用于 API 身份验证或 SSO 身份验证。更多详情,您可以查看this article
  • 如果你在你的Asp.net核心应用程序中使用API​​控制器(包含登录和注销页面),你可以直接使用基于角色的授权、基于声明的授权、基于策略的授权使用 Asp.net Core Identity 进行授权,而不是使用 JWT 身份验证。请参考以下文章:Policy-based authorization in ASP.NET Core(点击slide bar查看其他文章)
猜你喜欢
  • 2021-06-28
  • 2021-08-04
  • 2017-11-29
  • 2018-08-15
  • 2012-03-29
  • 2011-01-25
  • 2022-01-01
  • 1970-01-01
  • 2020-09-07
相关资源
最近更新 更多