【问题标题】:Simple temporary authentication without a username or password无需用户名或密码的简单临时身份验证
【发布时间】:2014-10-31 18:32:28
【问题描述】:

我需要向现有的 Web 表单添加一些授权/身份验证逻辑。本质上,用户将输入他们的电子邮件地址,然后我根据现有数据库检查该电子邮件地址,如果存在,我会向该地址发送一封电子邮件,其中包含指向 Web 应用程序的激活链接。一旦用户单击该链接,我希望他们的客户端在短时间内被视为“授权”(例如他们的浏览器会话)。然后他们可以访问某些页面,直到他们的身份验证过期。

使用自定义 ASP.NET 表单身份验证非常容易做到这一点,但经过一些研究,今天在授权/身份验证方面似乎有更多选择。诸如 ASP.NET Identity 2、Katana/OWIN 等等之类的东西,它变得相当强大。

我正在寻找有关当前在 MVC4 应用程序中实现此类功能的最简单方法的建议。如有必要,我应该能够将应用程序升级到 MVC5。

【问题讨论】:

    标签: asp.net asp.net-mvc authentication


    【解决方案1】:

    这与大多数密码重置使用的过程基本相同,因此您几乎可以以相同的方式处理它:

    1. 创建一个表来跟踪这些“身份验证”。您几乎只需要一个用于标记的列、一个用于日期时间的列、一个用于布尔值的列。 datetime 可以跟踪令牌的创建日期和时间,然后您可以在代码中使用它来根据您想要的时间范围计算它是否太旧,或者您可以跟踪令牌的过期日期和时间,然后如果过期日期已过,只需检查您的代码。该布尔值将跟踪电子邮件地址是否已通过您发送的电子邮件中带有令牌的链接进行确认。

    2. 在您的初始表单中,您收集电子邮件地址并将其与盐和单向加密相结合以生成令牌。您使用包含该令牌的链接发送电子邮件。将令牌和适当的日期时间值保存在您的表中。

    3. 在用户单击链接后转到的页面上,您使用 URL 中的令牌在表中查找匹配的行,检查日期值,并将布尔值设置为 true 以进行确认。然后,将令牌存储在Session

    4. 在每个后续请求中,检查 1) Session 中有一个令牌,以及 2) 该令牌仍然有效(在数据库中查找它并检查日期时间和确认状态)。如果令牌不存在或不再有效,请删除该行,从Session 中删除令牌,并将用户重定向到原始电子邮件地址收集表单。否则,允许用户查看那里的任何内容。

    【讨论】:

      【解决方案2】:

      最简单的方法是为用户创建一个数据库表,并检查用户身份验证,如果它使用 FormsAuthentication.RedirectFromLoginPage,身份框架为您提供了更多的安全和加密选项,也用于组和角色管理。

      http://msdn.microsoft.com/en-us/library/ka5ffkce(v=vs.110).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2019-10-28
        • 1970-01-01
        • 2012-01-20
        相关资源
        最近更新 更多