【问题标题】:ASP.NET Data Protection - Migrating From MachineKeyASP.NET 数据保护 - 从 MachineKey 迁移
【发布时间】:2020-09-23 17:05:41
【问题描述】:

我在 ASP.NET 中使用 MachineKey.ProtectMachineKey.Unprotect 来加密和解密敏感数据。现在,我正在尝试迁移到 ASP.NET Core。我读到它有一个数据保护API。但我有以下问题在文档中找不到答案:

  1. 我在 web.config 中定义了验证密钥和解密密钥。但是数据保护 api 似乎会自动生成密钥。那么,如何手动分配这对相同的密钥,以便可以解密之前加密的数据。
  2. 数据保护 api 似乎会自动使密钥过期并创建新密钥。那么,它如何能够解密用以前的密钥加密的数据呢?我应该以某种方式禁用此过期机制吗?

【问题讨论】:

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


    【解决方案1】:

    您可以将这些代码用于 .net core 中的机器密钥保护。 也请参阅此链接。 AspNetTicketBridge

    public async Task InvokeAsync(HttpContext context)
        {
            try
            {
                var authorizationToken = context.Request.Headers.FirstOrDefault(q => q.Key.Equals("Authorization")).Value;
    
                // Decrypt the token
                var ticket = MachineKeyTicketUnprotector.UnprotectOAuthToken(GetTokenWithoutBearer(authorizationToken), _config.DecryptionKey, _config.ValidationKey);
    
                // The ticket is in v3 format and needs to be converted to v5 (ASP.NET Core 2.0).
                // Can use whatever you want for AuthScheme
                var newTicket = AuthenticationTicketConverter.Convert(ticket, "");
    
                // If using a custom AuthenticationHandler, you can return the new ticket 
                // in the HandleAuthenticateAsync method.
                var result = AuthenticateResult.Success(newTicket);
    
                if (!result.Succeeded)
                    await UnAuthorizeRequest(context);
    
                await _next.Invoke(context);
            }
            catch (Exception)
            {
                await UnAuthorizeRequest(context);
            }
        }`
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多