ASP.NET 数据保护 - 从机器密钥迁移



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

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

您可以使用这些代码在 .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);
}
}`

最新更新