Si è verificato un errore durante un'operazione di crittografia nel debug

Si è verificato un errore durante un'operazione di crittografia nel debug

Mi sono imbattuto nello stesso problema. Dopo aver 'jacking con esso' per più di un'ora, sono entrato nel database dei membri (spesso creato automaticamente da Visual Studio) e ho rimosso tutte le righe dalla tabella UserTokenCaches. Ha eseguito l'applicazione, ha superato il messaggio di errore crittografico. È stato creato un nuovo record di token di cache e inserito nella tabella.


Non l'hai fatto. Abbastanza importante capire perché ricevi un messaggio di eccezione così inutile. È intenzionale . System.Web nasconde il vero motivo per cui il codice crittografico non è riuscito. Viene visualizzato un messaggio di errore blando ("non ha funzionato") e nessuna traccia dello stack del codice effettivo che non è riuscito.

Importante perché non farlo è pericoloso , consente a un utente malintenzionato di sondare la tua app Web con dati intenzionalmente non corretti e di acquisire informazioni dalle eccezioni per trovare un modo per decifrare il tuo codice sicuro.

È necessario ottenere una migliore traccia dello stack e un messaggio di eccezione per trovare il vero motivo. Ciò richiede di dire al debugger di interrompersi quando viene generata l'eccezione. Quello vero, non quello blando. In VS2015, usa Debug> Windows> Impostazioni eccezioni. Fare clic sulla casella di controllo "Eccezioni Common Language Runtime" in modo che si trasformi da rettangolo in segno di spunta. Inoltre:Strumenti> Opzioni> Debug> Generale> deseleziona la casella di controllo "Abilita solo il mio codice".


Ho trovato una soluzione a questo.

La sezione di codice da cui proveniva l'errore è il file AdalToken.Cache.cs.

userId = signedInUserId;
this.AfterAccess = AfterAccessNotification;
this.BeforeAccess = BeforeAccessNotification;
this.BeforeWrite = BeforeWriteNotification;
// look up the entry in the database
Cache = db.UserTokenCacheList.FirstOrDefault(c => c.webUserUniqueId == userId);
// place the entry in memory
this.Deserialize((Cache == null) ? null : MachineKey.Unprotect(Cache.cacheBits,"ADALCache"));

In particolare l'ultima riga.

Rilevante è anche il contesto per db.UserTokenCacheList che è:

{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<UserTokenCache> UserTokenCacheList { get; set; }
    }

    public class UserTokenCache
    {
        [Key]
        public int UserTokenCacheId { get; set; }
        public string webUserUniqueId { get; set; }
        public byte[] cacheBits { get; set; }
        public DateTime LastWrite { get; set; }
    }
}

Tutto questo è stato generato da Visual Studio quando ho eseguito la procedura guidata per la configurazione dell'autenticazione di Azure quando ho avviato questo nuovo progetto.

Riguardo alla base("DefaultConnection") in ApplicationDbContext.

Non c'era alcuna voce per questo nel mio web.config, tuttavia fino a poco tempo ha sempre funzionato.

In web.config, all'interno di ho aggiunto una riga per DefaultConnection per puntare al mio database e ora funziona tutto, almeno per ora.

Spero che questo possa essere di aiuto a chiunque riceva lo stesso errore.