【问题标题】:Authenticate without username and password无需用户名和密码进行身份验证
【发布时间】:2017-11-15 04:07:00
【问题描述】:

我有一个包含 4 列的数据库表(email、token、tokenDate (DateTime)、isOnline (bool))

我在 ASP.NET MVC 中尝试做的是有一个应用程序,用户在该应用程序中转到这样的页面 Home/Index?email=xxxxx@xxxxxxx.com 并且当他们转到该页面时,他们正在登录,现在当他们转到时我可以做什么页面是这样的:

  • 在数据库表中查找用户
  • isOnline标记为真
  • tokenDate 设置为DateTime.Now
  • 创建一个随机的token 并将其设置为令牌
  • 创建一个与令牌值相同的 Web cookie

当其他人(或同一个人)使用相同的电子邮件尝试访问该页面时

  • 在数据库表中查找用户
  • 如果isOnline被标记为true并且cookie不存在,如果它确实检查了数据库中的cookie,如果失败则将它们引导出来,如果成功则可以进入。

我的问题是我要创建什么令牌,以便他们的原始用户仍然经过身份验证,所以如果他们关闭浏览器或转到另一个页面,他们仍然可以转到他们进行身份验证的主页?

【问题讨论】:

  • 我会确保如果有人可以通过 URL 登录,则该电子邮件地址已加密,因此人们不能只是开始随机使用电子邮件地址登录。
  • 为什么应用程序没有密码?假设如果有人使用我的电子邮件登录,然后我的原始用户无法再登录,因为具有相同电子邮件的令牌不匹配?这不是@Jack Marchetti 提到的安全问题吗?
  • 但是不能有人转发 URL,然后两个人拥有相同的加密电子邮件吗?
  • @stom 这些是我的指示,我也不喜欢它。
  • 非常清楚 - 这不是身份验证。这是盲目的信任。

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


【解决方案1】:

用户转到类似Home/Index?email=xxxxx@xxxxxxx.com 的页面或在文本框中输入用户类型电子邮件

第 1 步:

  • 在数据库表中查找用户,如果不存在就访问 拒绝页面。
  • 如果存在,将 isOnline 标记为 true。
  • 将 tokenDate 设置为。 DateTime.UtcNow 以便稍后显示到当地时间 用户。
  • 使用创建随机令牌 GUID 并将其设置为数据库中的令牌。
  • 创建一个 cookie 储藏 multiple 值一个以 GUID 值作为令牌,另一个是用户 电子邮件然后将 cookie 过期设置为年,因此即使用户也不会过期 关闭浏览器。

第 2 步:

现在当用户转到Home/SomeOtherPage或认证页面Home/Index?email=xxxxx@xxxxxxx.com

  • 检查同名 cookie 是否存在,如果存在则从 cookie 中获取电子邮件和令牌值并检查数据库中的值,如果令牌与电子邮件匹配,则用户已通过身份验证。

  • Edit cookie 并在 cookie 中设置另一个值表示用户是否已通过身份验证,因此下次用户访问时检查已验证的值,因为如果用户再次访问页面,这将消除再次访问数据库。

注意:

如果你可以encrypt 邮件,同时在 cookie 中设置它会更好。

【讨论】:

  • 严格来说应该是“使用 GUID 创建一个 UNIQUE 令牌”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多