【问题标题】:Authentication ticket ( Forms authentication )身份验证票(表单身份验证)
【发布时间】:2009-05-02 20:36:40
【问题描述】:


Q1 - Forms 身份验证模块在将其身份验证信息 (ticket) 放入 cookie 之前对其进行加密。

现在,我对加密算法知之甚少的是,它们通常使用一些随机生成的值来加密和解密一段数据。因此,如果相同的算法使用值 A 来加密某些数据,那么它也需要相同的值才能解密这些数据。


A) 由于多个用户可以登录(通过表单身份验证模块)到特定的 Web 应用程序,这些用户中的每一个的身份验证信息是否会使用相同的随机生成值进行加密?

  • 如果是,那这不代表安全风险吗?


  • 如果不是,那么当下次请求时,Asp.Net 从用户那里收到身份验证 cookie(其中包含票证),它如何知道它用于加密票证的随机生成值(我假设它需要这个解密票证的价值相同)


第二季度 身份验证票包含有关经过身份验证的用户的几条信息,但是这些数据中的哪一条实际上告诉 Asp.Net(当用户再次请求页面时)它正在处理已通过身份验证的用户?


感谢

【问题讨论】:

    标签: .net asp.net encryption


    【解决方案1】:

    Q1:表单身份验证使用machineKey 加密cookie。由于它的值在 machine.config 中是恒定的,因此 ASP.NET 能够解密使用相同密钥加密的 cookie。

    cookies 使用相同的密钥加密,但这个密钥只有服务器知道,这意味着用户不能篡改 cookie 的数据,因此不能冒充另一个用户,所以使用它没有安全风险相同的私钥来加密 cookie。

    Q2:票证包含以下信息:用户名和用于确定其是否有效的日期(如果设置了滑动到期,ASP.NET 可以重写 cookie,因为它会检查每个请求的有效性)。如果 cookie 是由客户端发送的,并且在解密后仍然有效,则 ASP.NET 假定客户端已通过身份验证。

    【讨论】:

    • 你也可以使用自动生成的 machineKey,我相信它会在应用程序启动时生成并缓存。
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 2012-03-15
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多