我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?

Posted

技术标签:

【中文标题】我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?【英文标题】:How should i secure my Web Application(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 调用 => 获取令牌 => 然后它只是空白。我不知道下一步该怎么走

你能帮我一些建议吗?

【问题讨论】:

欢迎来到 SO。这个问题需要更加集中,因为不清楚您到底需要什么。你最好先尝试一些东西。这样您就可以更准确地询问您遇到的问题。也许作为开始,您可以查看Introduction to Identity on ASP.NET Core 或如何使用IdentityServer4 for authentication 感谢您的评论 【参考方案1】:

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

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

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

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

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

    客户端向服务器发送请求(包含用户信息,如:用户名和密码)获取token 服务器接收用户信息并检查授权。如果验证成功,服务器会生成一个 JWT 令牌。 客户端收到令牌并将其存储在本地某处。 客户端在以后的请求中发送令牌。 服务器从请求标头中获取令牌,再次计算哈希,方法是使用 a) 令牌中的标头 b) 令牌中的有效负载 c) 服务器已经拥有的密钥。 如果 ("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查看其他文章)

以上是关于我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Web 应用程序? [关闭]

缩放 ASP.NET 应用程序

我应该如何保护我的 iOS 应用程序中的敏感内容不被截图? [复制]

如何在 Android 中保护调用 web 服务

如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?

在 asp.net 和 Join 语句中连接到 Access 数据库