【问题标题】:ASP.NET Core 3.1 Authentication Compared to PHPASP.NET Core 3.1 身份验证与 PHP 的比较
【发布时间】:2020-11-10 14:12:58
【问题描述】:

我来自 PHP 背景,每当我创建登录页面和需要您登录才能查看的页面时,我都遵循此处找到的方法:

How to check if a user is logged-in in php?

这基本上依赖于创建会话,并在任何页面的顶部检查会话是否存在,如果不存在则重定向回登录页面,如果会话不存在,如果它确实存在,它会继续读取其余部分php代码。

但是,我现在正在尝试学习 ASP.NET 3.1 并使用它创建一个 Web 应用程序。我在身份框架上找到了很多资源,但是当你比较我上面在 PHP 中所做的事情时,这似乎比我真正需要的要多得多,我认为它是安全的,因为没有存储类似于我在大多数身份框架实现。

我在 ASP.NET 3.1 中没有看到任何类似于这种 PHP 方法的身份验证示例,在每个剃须刀页面的顶部,他们检查会话状态,如果失败,它会重定向到登录页面。我认为这应该是一种简单而安全的方法,那么为什么它在 ASP.NET Core 中不那么流行呢?如果它是类似于 PHP 的良好实践,你能否指出我正在做的一个例子的方向。我承认我在 Stackoverflow.com 上找到了一个示例,我似乎无法再次找到该示例,其中用户在 startup.cs 文件中添加了对会话功能的检查,并表示这是一种不好的做法,但根本没有对其进行扩展。

【问题讨论】:

  • 我将把它留在这里:stackoverflow.com/questions/48836688/… 这很可能会回答你的一些问题。
  • asp.net 核心试图强制执行好的做法并阻止坏的做法,因此通常很难找到“像在 php 中一样”的方法。

标签: c# asp.net-core razor-pages


【解决方案1】:

会话是不稳定的。由于多种原因中的任何一种,它们都可能在服务器上被意外清除。这就是正式的 ASP.NET 身份验证框架基于 cookie 的原因。这被认为是一种更用户友好的方式来处理维护身份验证凭据,而不是在用户正在执行某项操作时将其重定向到登录页面。

您不必使用身份。您可以针对任何商店验证用户并相应地发出 cookie,例如:https://www.mikesdotnetting.com/article/335/simple-authentication-in-razor-pages-without-a-database

【讨论】:

  • 那么在这种情况下你会避免使用 HttpContext.Session.SetString() 吗?
  • 我不会用它来存储用户的身份验证状态。
  • 我将支持您的回复,因为我能够使用该教程创建登录 cookie。我确实有一个问题。这些默认身份验证 cookie 是否经过加密(当持久化时),我假设它们存储用户名和密码。解密这些由 asp.net core 3.1 身份创建的默认身份验证 cookie 对某人来说有多难?
  • 是的,它们是加密的。它们不包含密码。默认情况下,ASP.NET Identity 在存储密码之前对其进行哈希处理,因此永远无法检索到它。我相信加密是使用 SHA256 完成的。
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2021-11-10
  • 2020-07-27
相关资源
最近更新 更多