È stata generata un'eccezione durante la deserializzazione del token. Impossibile decrittografare il token antifalsificazione nell'applicazione .Net Core 2.2
Sto ricevendo l'errore nel mio registro. Ho passato la maggior parte della mia giornata a trovare la soluzione ma non sono riuscito a trovare quella che soddisfa le mie esigenze.
Ecco l'errore di registro
Severity=[ERROR], ipaddress=xxxx, subprocess=Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery, description=È stata generata un'eccezione durante la deserializzazione del token. Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: non è stato possibile decrittografare il token antifalsificazione. ---> System.Security.Cryptography.CryptographicException: la chiave {xxxxxxxxxx} non è stata trovata nel keyring. in Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status) in Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requireMigration, Boolean& wasRevoked ) in 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)
{
Risposte
Se
- la tua app è ospitata su più server
- non ha configurato la protezione dei dati condivisi
- non stai utilizzando sessioni permanenti
ciò accadrà quando l'utente richiede una pagina con un modulo dal server A e successivamente invia il modulo al server B.
Può anche accadere su un singolo server IIS se
- l'utente richiede una pagina con un modulo
- si riavvia il server
- l'utente invia il modulo
Il motivo è che un riavvio provoca il caricamento in memoria di un nuovo keyring e la chiave antifalsificazione all'interno del modulo non viene più convalidata.
Quest'ultimo caso può essere risolto in IIS selezionando "carica profilo utente" nel pool di app.
Ulteriori informazioni:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1