【问题标题】:ASP.NET Data Protection - Migrating From MachineKeyASP.NET 数据保护 - 从 MachineKey 迁移
【发布时间】:2020-09-23 17:05:41
【问题描述】:
我在 ASP.NET 中使用 MachineKey.Protect 和 MachineKey.Unprotect 来加密和解密敏感数据。现在,我正在尝试迁移到 ASP.NET Core。我读到它有一个数据保护API。但我有以下问题在文档中找不到答案:
- 我在 web.config 中定义了验证密钥和解密密钥。但是数据保护 api 似乎会自动生成密钥。那么,如何手动分配这对相同的密钥,以便可以解密之前加密的数据。
- 数据保护 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);
}
}`