【问题标题】:MachineKey.Unprotect Causing Exception When Referenced From .NET CoreMachineKey.Unprotect 从 .NET Core 引用时导致异常
【发布时间】:2020-06-08 08:25:00
【问题描述】:

我正在从 ASP.NET Core 应用程序引用 .NET Framework 4.7.2 类库。并且框架代码中包含MachineKey.Unprotect,貌似会导致如下错误:

无法从程序集中加载类型“System.Web.Security.MachineKey” 'System.Web,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'。

这是某种限制还是有解决方法?

【问题讨论】:

  • 这能回答你的问题吗? How to implement machineKey in ASP.NET Core 2.0
  • @kapsiR 不是真的,因为我不想在 .NET Core 中重新实现加密。我需要按原样使用类库。
  • 嗨@John L,我的回复对你有帮助吗?如果我的回复已经解决了您的问题,请采纳为答案。关于如何将其标记为答案,您可以参考here。这将帮助面临同样问题的其他人。如果没有,请您跟进让我知道吗?

标签: c# .net asp.net-core .net-core


【解决方案1】:

由于 System.Web.Security 不是使用 .NETStandard 构建的,因此我们无法在 asp.net 核心应用程序中使用它。

根据您的描述,如果要解密机器密钥加密值。我建议您可以尝试使用一些实现 asp.net MachineKey.upprotect 方法的第三方库。例如:AspNetTicketBridge。你可以直接从Nuget Package安装。

更多细节,你可以参考下面的测试演示:

在 asp.net 应用程序中保护消息。

    protected void Page_Load(object sender, EventArgs e)
    {
        //Label1.Text = HttpContext.Current.User.Identity.Name;

        var message = "My secret message";

        var encodedMessage = Encoding.ASCII.GetBytes(message);

        var protectedMessage = MachineKey.Protect(encodedMessage);

        var protectedMessageAsBase64 = Convert.ToBase64String(protectedMessage);

        Label2.Text = protectedMessageAsBase64;

    }

机器钥匙:

<machineKey compatibilityMode="Framework45" validationKey="xxx" decryptionKey="xxx" validation="SHA1" decryption="Auto" />

在 asp.net 核心应用程序中取消保护消息:

        string validationKey = "machinekey value";
        string decryptionKey = "machinekey value";
        var message = "above base64 message";

        var convertFromBase64 = Convert.FromBase64String(message);
        var ticket = MachineKeyTicketUnprotector.Unprotect(convertFromBase64, decryptionKey, validationKey, "AES", "HMACSHA1", "User.MachineKey.Protect");

        var decodedMessage = Encoding.ASCII.GetString(ticket);

结果:


如果你想实现在asp.net核心应用中使用machinekey,你可以尝试从.net Framework machinekey.cs中实现源代码。详情可以参考这个answer

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 2018-11-28
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多