【问题标题】:How to decrypt asp.net owin token in asp.net core manually?如何手动解密asp.net核心中的asp.net owin令牌?
【发布时间】:2019-05-27 10:46:17
【问题描述】:

我有一个现有的应用程序,它使用机器密钥方法生成 owin 身份令牌。相同的令牌用于验证各种应用程序。其中一个应用程序现在位于 asp.net 核心中。有没有办法在 asp.net core 中使用相同的 owin 生成的身份令牌?

或者我们可以在 asp.net core 中手动解码该令牌

【问题讨论】:

    标签: asp.net-core machinekey


    【解决方案1】:

    使用机器密钥时,您不能在 ASP.NET 和 ASP.NET Core 之间共享任何东西。能够解密由 ASP.NET 应用程序设置的 ASP.NET Core 中的某些内容的唯一方法是,如果 1) ASP.NET 应用程序利用数据保护提供程序 2) 数据保护提供程序密钥环被持久保存到文件系统或所有应用程序(ASP.NET 和 ASP.NET Core 等)可访问的网络位置,并且所有应用程序都使用相同的应用程序名称。

    docs go into great detail on this

    【讨论】:

      【解决方案2】:

      您可以使用IDataProtector直接解密从授权码流返回的访问令牌。我们实现IDataProtector 接口并使用System.Web.Security.MachineKey.Unprotect method。 制作解密 OWIN 票证的辅助方法

      private class MachineKeyProtector : IDataProtector
      {
          private readonly string[] _purpose =
          {
              typeof(OAuthAuthorizationServerMiddleware).Namespace,
              "Access_Token",
              "v1"
          };
      
          public byte[] Protect(byte[] userData)
          {
              //throw new NotImplementedException();
          }
      
          public byte[] Unprotect(byte[] protectedData)
          {
              return System.Web.Security.MachineKey.Unprotect(protectedData, _purpose);
          }
      }
      

      获取 ClaimsIdentity 和属性字典。我们只需创建一个实例并传入 Token 即可获取解密后的 Ticket

      var secureDataFormat = new TicketDataFormat(new MachineKeyProtector());
      AuthenticationTicket ticket = secureDataFormat.Unprotect(accessToken);
      

      Above AuthenticationTicket 本身包含 ClaimsIdentity 和属性字典。 参考IDataProtector Interface

      【讨论】:

      • OAuthAuthorizationServerMiddleware 在 .NET Core 中不受支持。
      猜你喜欢
      • 2023-03-19
      • 2016-07-09
      • 2019-09-23
      • 1970-01-01
      • 2015-08-09
      • 2014-09-18
      • 2017-03-19
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多