【问题标题】:How to authenticate with Entity Framework如何使用实体框架进行身份验证
【发布时间】:2012-06-04 14:58:01
【问题描述】:

我有一个包含表的实体框架模型

apsnet_Users
aspnet_Memberships 

我想检查 WCF 库中用户名和密码的验证如何实现

我要不要给app.config添加会员资格,如何实现这样的目标?

最好的问候

【问题讨论】:

    标签: entity-framework c#-4.0 wcf-data-services


    【解决方案1】:

    一个基本的(但安全的)用户名/密码数据库应该有这样的列:

    UserName     - Text
    PasswordSalt - Binary
    PasswordHash - Binary
    

    用户名可以存储为纯文本。

    盐是一个随机的字节串,最好至少和散列一样长。

    密码哈希是密码+盐的二进制哈希。

    以下是为用户提供新密码时的基本步骤。我将以 SHA-256 哈希为例。

    1. 将所需密码转换为字节数组。
    2. 使用 CSPRNG 生成另一个 32 字节长的字节数组。这是盐。
    3. 将盐添加到密码字节数组的末尾。
    4. 使用 SHA-256 对密码进行哈希处理。
    5. 将盐存储在数据库中。
    6. 将密码哈希存储在数据库中。

    然后当用户在登录时输入他们的密码,这就是过程。

    1. 在数据库中查找用户。
    2. 将输入的密码转换为字节数组。
    3. 将数据库中的盐添加到密码字节数组的末尾。
    4. 使用 SHA-256 对密码进行哈希处理。
    5. 如果哈希与数据库中的哈希匹配,则密码正确。

    这种密码验证方法是高安全性应用程序的首选方法。它并不慢,也不是很难实现。最好的事情是,您可以将整个密码表提供给您喜欢的任何人,而他们最多只能选择一个用户并开始猜测密码。

    【讨论】:

    • 除非你告诉我它是如何不起作用的,否则我无法帮助你。我在那里也没有看到任何哈希码。此外,这并不完全是您添加到现有密码身份验证的内容。这是整个身份验证。
    • 好吧,那代码不是我的意思。它甚至没有散列。也许你应该更多地阅读这个主题。 Google 是一个很好的起点。
    【解决方案2】:

    我没有使用实体框架,以及其他的身份验证算法,所以我直接使用 SQL 的成员资格,Microsaoft 加密方式很难检索

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多