gpt4 book ai didi

asp.net - 在表单例份验证 cookie 中存储密码 - ASP.NET 和 WCF 调用

转载 作者:行者123 更新时间:2023-12-03 18:24:49 24 4
gpt4 key购买 nike

为了我的网络应用程序安全,我使用 FormsAuthentication/MembershipProvider 和非持久性 cookie。

我的应用程序与一些 Web 服务交互,这些服务也使用 Membership 提供程序。

用户密码在数据库中散列。

问题是登录到应用程序的人需要在每次加载页面时使用他的用户名和密码对 Web 服务进行身份验证。但是一旦用户登录了他的密码,就无法检索,因为它是散列的。

我想知道密码是否可以安全地存储在身份验证 cookie 中,以便用户可以通过 Web 服务进行身份验证。

或者更好的主意!

编辑
我喜欢下面的 JOHNS IDEA,但有 4 条关于我想在走这条路线之前解决的机制的评论......

最佳答案

我同意@John 的回答,即使用一次性 token 比存储凭据更好。

对于 token ,您可以生成一些随机 GUID 并将其存储在数据库中。

作为不需要在 ASP.NET 应用程序和 WCF 服务之间进行协调的替代方法,您可以将签名文档作为 token 发送。

  • 创建带有签名时间、用户名和签名者姓名的 XML 或 JSON 文档(ASP.NET 应用程序)。
  • 生成上述文档的哈希值。
  • 使用非对称加密(使用私钥)对哈希进行签名。

  • WCF 要做的就是验证散列和签名。所以这不涉及访问相同的数据库。使用签名时间,您可以在固定时间内使 token 过期。

    编辑 : 这个想法是基于 public-key cryptography (也称为非对称 key 算法、公钥/私钥)。如果您使用私钥加密某些内容,则只能使用相应的公钥将其解密;如果您使用公钥加密某些内容,则只能使用相应的私钥对其进行解密。见 Implementing RSA in C#了解代码在 C# 中的样子。为什么这很有用?因为我们可以用它来实现数字签名。数字签名是一种证明我并且只有我写了一些东西,而不是其他人的一种方式。

    按照上述步骤生成签名。您首先需要定义“让这个人进入”文档的规范形式。通常,非对称 key 算法无法处理太大的输入,因此您可以从中生成散列,然后使用 ASP.NET 应用程序的私钥对散列进行加密。生成的签名只能使用您的应用程序的公钥解密。最后,您可以将所有三个组件(原始文档、哈希和签名)打包成某种格式,如 XML 或 JSON,并将其作为 token 发送。

    例如,假设您对所有内容都使用 JSON 格式。一、原文“让这家伙在文档中”:
    {"UserName":"Foo","SignedTime":"2009-07-09T00:00:00","Signer":"ASP.NET APP1"}

    接下来,生成上述字符串的 SHA-1 哈希值,即 byte[]并使用 modified Base64 encoding 对其进行编码或其他东西,看起来像:
    b2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 

    上面是假字符串,实际的东西可能看起来更长。然后你取散列 byte[]并使用 RSA 对其进行加密,这会生成另一个 byte[]所以也用修改后的 Base64 编码:
    mxlIGdlbmVyYXRpb24gb2Yga25vd2xfo34

    最后,您制作另一个 JSON 文档来存储上述所有内容。
    {"UserName":"Foo","SignedTime":"2009-07-09T00:00:00","Signer":"ASP.NET APP1","Hash":"b2YgYW55IGNhcm5hbCBwbGVhc3VyZS4","Signature":"mxlIGdlbmVyYXRpb24gb2Yga25vd2xfo34"}

    最终的 JSON 文档将成为您的无密码 token 。将其传递给 WCF 服务。
    WCF 服务获取 token ,通过删除哈希和签名来构造原始文档:
    {"UserName":"Foo","SignedTime":"2009-07-09T00:00:00","Signer":"ASP.NET APP1"}

    按照相同的算法生成哈希并验证它是否相同。使用 ASP.NET 应用程序的公钥解密签名,看看它是否成为哈希。此时,文档被验证为由签名者签名。检查当前时间和签名时间,看看 token 是否仍然有效。您所需要的只是一种在两个代码库之间分发公钥的方法,这些代码库可以从 XML 加载。

    关于asp.net - 在表单例份验证 cookie 中存储密码 - ASP.NET 和 WCF 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078617/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com