Uma exceção foi lançada ao desserializar o token. O token antifalsificação não pôde ser descriptografado no aplicativo .Net Core 2.2
Estou recebendo o erro no meu log. Passei a maior parte do dia procurando a solução, mas não consegui encontrar aquela que atendesse às minhas necessidades.
Aqui está o erro de registro
gravity=[ERRO], ipaddress=xxxx, subprocess=Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery, description=Uma exceção foi lançada durante a desserialização do token. Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: o token antifalsificação não pôde ser descriptografado. ---> System.Security.Cryptography.CryptographicException: A chave {xxxxxxxxx} não foi encontrada no chaveiro. em Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status) em Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean&revoeanMigration wasked ) em Microsoft.AspNetCore.DataProtection.KeyManagement.
"Certificates": {
"StoreName": "My",
"StoreLocation": "LocalMachine"
"SerialNumber": "xxxxxxxxxxxx"
},
private X509Certificate2 LCertificate()
{
var storeName = Configuration["Certificates:StoreName"];
var storeLocation = Configuration["Certificates:StoreLocation"];
string serialNumber = Configuration["Certificates: SerialNumber"];
using(X509Store store = new X509Store(storeName,storeLocation))
{
var certificates = store.Certificates
.Find(X509FindType.FindBySerialNumber,
serialNumber,
acceptValidCertOnly);
return certificates[0];
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer
.AddSigningCredential(new X509Certificate2(LCertificate()))
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginModel model)
{
Respostas
Se
- seu aplicativo está hospedado em vários servidores
- não configurou a proteção de dados compartilhados
- você não está usando sticky sessions
isso acontecerá quando o usuário solicitar uma página com um formulário do servidor A e, posteriormente, enviar o formulário ao servidor B.
Também pode acontecer em um único servidor IIS se
- usuário solicita uma página com um formulário
- você reinicia o servidor
- usuário envia o formulário
A razão para isso é que uma reinicialização faz com que um novo chaveiro seja carregado na memória e a chave antifalsificação dentro do formulário não seja mais válida.
O último caso pode ser corrigido no IIS marcando "carregar perfil do usuário" no pool de aplicativos.
Mais informações:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1