使用ASP.NET身份存储用户名哈希

用户名

我正在编写一个需要始终从数据库中删除/缺少个人身份信息的应用程序假设某人可能在其用户名中使用其真实姓名,并且在其AspUserIdentity记录中可能存在一个电子邮件地址,我决定一种解决方案可能是对这些值进行哈希处理。简而言之:当某人使用用户名登录时,我对输入的用户名进行哈希处理,看看该哈希是否存在于数据库中;如果可以,那么我将其登录。这很容易做到,并且可以通过修改AccountController中的Login和Register方法来正常工作。但是现在我不知道输入的用户名了...

我可以将用户名存储在会话中,但这看起来很简陋。我想做的是更新成功登录后发送下来的cookie,以使用他们输入的用户名(而不是存储在数据库中的哈希值)。这样,User.Identity.GetUserName()返回纯文本用户名(而不是哈希用户名)。对于客户来说,该过程应该是透明的(对我来说,对于程序员也是一样)。

问题是:如何?最好的地方是什么?当涉及到最新的ASP.NET Identity时,我还是比较环保的。我在Startup.Auth中看到了很多与Cookie相关的内容,但是在登录后以及发送下来之前,我看不到任何可以修改Cookie的地方。

所有这些都在Owin内部吗?

提前致谢,

Trailmax

当用户登录并比较用户名的哈希值时,可以将其真实用户名添加为身份声明。它被序列化为cookie,并在每次请求时可供用户使用,但不能持久存储在数据库中:

public async Task SignIn(string userName, string password, bool rememberMe)
{
    var hashedUsername = getMyHash(username)
    var loggedInUser = await userManager.FindAsync(hashedUsername, password);
    if (loggedInUser == null)
    {
        // failed to login
        return FailedToLogin(); // whatever you do there
    }

    // Ok, from now on we have user who provided correct username and password.

    // and because correct username/password was given, we reset count for incorrect logins. This is for user lockout
    await userManager.ResetAccessFailedCountAsync(loggedInUser.Id);

    if (!loggedInUser.EmailConfirmed)
    {
        return EmailIsNotConfirmed(); // email is not confirmed - display a message
    }

    if (await userManager.IsLockedOutAsync(loggedInUser.Id))
    {
        return UserLockedOut(); // user is locked out - display a message
    }

    var identity = await userManager.CreateIdentityAsync(loggedInUser);
    identity.AddClaim(new Claim("OriginalUsername", originalUsername));

    var authenticationManager = context.GetOwinContext().Authentication;
    authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = rememberMe }, identity);

    //TODO redirect to a home page
}

然后,当您需要显示实际的用户名而不是哈希时,请执行以下操作:

public static String GetOriginalUsername(this IPrincipal principal)
{
    if (principal == null)
    {
        return String.Empty;
    }

    var claimsPrincipal = principal as ClaimsPrincipal;

    if (claimsPrincipal == null)
    {
        return String.Empty;
    }

    var originalUsernameClaim = principal.Claims.SingleOrDefault(c => c.Type == "OriginalUsername");

    if (originalUsernameClaim == null)
    {
        return String.Empty;
    }

    return originalUsernameClaim.Value;
}

User.GetOriginalUsername()在* .cshtml文件或Controllers中调用此方法或者,HttpContext.Current.User.GetOriginalUsername()如果您在其他地方需要它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET身份限制用户名长度

来自分类Dev

ASP.NET身份使用电子邮件代替用户名

来自分类Dev

使用asp.net身份更改当前用户的用户名后如何更改身份验证cookie

来自分类Dev

使用InsertParameters在asp.net(vb)中存储用户名时遇到困难

来自分类Dev

存储用户名以供以后使用

来自分类Dev

ASP.NET身份用户名中的特殊语言字符

来自分类Dev

Asp.Net身份-不区分大小写的电子邮件和用户名

来自分类Dev

具有Google+和Asp.Net身份的外部登录用户名

来自分类Dev

具有特殊字符的ASP.NET MVC身份电子邮件/用户名

来自分类Dev

在ASP.NET Core 3.0中如何获取当前经过身份验证的用户名?

来自分类Dev

ASP.NET身份用户名(如何添加自己的验证)?

来自分类Dev

Asp.net MVC 从身份验证弹出窗口捕获用户名

来自分类Dev

在Asp.net mvc5中使用用户名代替电子邮件作为身份

来自分类Dev

如何在ASP.Net Web窗体身份中使用“用户名”而不是“电子邮件地址”登录

来自分类Dev

默认ASP.NET应用程序中存储的用户名和密码在哪里?

来自分类Dev

Apache Shiro:使用用户名/密码进行身份验证,但将用户标识存储为主体

来自分类Dev

在 asp.net 中创建用户 c# 身份不适用于希伯来语用户名

来自分类Dev

使用用户名的Java LDAP身份验证

来自分类Dev

仅使用用户名进行身份验证

来自分类Dev

更改Asp.NET身份验证以注册电子邮件地址,但不注册用户名

来自分类Dev

更改Asp.NET身份验证以注册电子邮件地址,但不注册用户名

来自分类Dev

使用$ username时,会话中存储的用户名更改

来自分类Dev

如何使用PHP接收和存储CURL用户名

来自分类Dev

加载表时显示用户名(存储在 ASP.Net Core Identity 系统中),而不是 ID

来自分类Dev

ASP.Net用户名到电子邮件

来自分类Dev

用户名和密码认证asp.net

来自分类Dev

无法在ASP.NET中使用“ User.Identity.Name”获取Windows用户名

来自分类Dev

无法在ASP.NET中使用“ User.Identity.Name”获取Windows用户名

来自分类Dev

如何使用用户名和密码访问 Asp.Net Core 中的 MongoDb?

Related 相关文章

  1. 1

    ASP.NET身份限制用户名长度

  2. 2

    ASP.NET身份使用电子邮件代替用户名

  3. 3

    使用asp.net身份更改当前用户的用户名后如何更改身份验证cookie

  4. 4

    使用InsertParameters在asp.net(vb)中存储用户名时遇到困难

  5. 5

    存储用户名以供以后使用

  6. 6

    ASP.NET身份用户名中的特殊语言字符

  7. 7

    Asp.Net身份-不区分大小写的电子邮件和用户名

  8. 8

    具有Google+和Asp.Net身份的外部登录用户名

  9. 9

    具有特殊字符的ASP.NET MVC身份电子邮件/用户名

  10. 10

    在ASP.NET Core 3.0中如何获取当前经过身份验证的用户名?

  11. 11

    ASP.NET身份用户名(如何添加自己的验证)?

  12. 12

    Asp.net MVC 从身份验证弹出窗口捕获用户名

  13. 13

    在Asp.net mvc5中使用用户名代替电子邮件作为身份

  14. 14

    如何在ASP.Net Web窗体身份中使用“用户名”而不是“电子邮件地址”登录

  15. 15

    默认ASP.NET应用程序中存储的用户名和密码在哪里?

  16. 16

    Apache Shiro:使用用户名/密码进行身份验证,但将用户标识存储为主体

  17. 17

    在 asp.net 中创建用户 c# 身份不适用于希伯来语用户名

  18. 18

    使用用户名的Java LDAP身份验证

  19. 19

    仅使用用户名进行身份验证

  20. 20

    更改Asp.NET身份验证以注册电子邮件地址,但不注册用户名

  21. 21

    更改Asp.NET身份验证以注册电子邮件地址,但不注册用户名

  22. 22

    使用$ username时,会话中存储的用户名更改

  23. 23

    如何使用PHP接收和存储CURL用户名

  24. 24

    加载表时显示用户名(存储在 ASP.Net Core Identity 系统中),而不是 ID

  25. 25

    ASP.Net用户名到电子邮件

  26. 26

    用户名和密码认证asp.net

  27. 27

    无法在ASP.NET中使用“ User.Identity.Name”获取Windows用户名

  28. 28

    无法在ASP.NET中使用“ User.Identity.Name”获取Windows用户名

  29. 29

    如何使用用户名和密码访问 Asp.Net Core 中的 MongoDb?

热门标签

归档