Mam stronę internetową o nazwie internetowej, która wywołuje nową witrynę MVC6, nad którą pracujemy. Użytkownik zaloguje się, jak zawsze na stronie internetowej formularza, korzystając z uwierzytelniania formularzy, a następnie przekierowywany do nowej witryny MVC6. W MVC6 wiem, że powinienem używać uwierzytelniania plików cookie, ale nie mogę go odszyfrować. Podejrzewam, że to się zmieniło wokół web.config i machinekey, ale naprawdę utknąłem.MVC6 Odszyfrowywanie pliku cookie uwierzytelniania formularzy z innej strony internetowej
Oto, co zrobiłem.
mam skonfigurować uwierzytelnianie cookies następująco
app.UseCookieAuthentication(options =>
{
options.CookieName = "MyWebformsCookie";
options.AutomaticAuthenticate = true;
options.AuthenticationScheme = "Cookies";
options.TicketDataFormat = new MySecureDataFormat();
options.DataProtectionProvider = new MyDataProtectionProvider();
//options.CookieDomain = "localhost";
});
Klasa jest następujący
public class MySecureDataFormat : ISecureDataFormat<AuthenticationTicket>
{
public string Protect(AuthenticationTicket data)
{
return string.Empty;
}
public string Protect(AuthenticationTicket data, string purpose)
{
return string.Empty;
}
public AuthenticationTicket Unprotect(string protectedText)
{
return null;
}
public AuthenticationTicket Unprotect(string protectedText, string purpose)
{
var ticket = FormsAuthentication.Decrypt(protectedText);
return null;
}
}
cookie jest odczytywany, a chroń metodę nazywa, ale to błędy na FormsAuthentication Metoda .Decrypt z błędem
Wystąpił wyjątek typu "System.Web.HttpException" w System.Web.dll, ale nie został obsłużony w kodzie użytkownika
Informacje dodatkowe: Nie można zweryfikować danych.
stos = w System.Web.Configuration.MachineKeySection.EncryptOrDecryptData (logiczna fEncrypt, bajt [] buf, bajt [] modyfikator początek Int32, długość Int32, logiczna useValidationSymAlgo, logiczna useLegacyMode, IVType ivType, logiczna signData) w System.Web.Security.FormsAuthentication.Decrypt (ciąg encryptedTicket) w WebApplication.Mvc.MySecureDataFormat.Unprotect (string protectedText, zastosowania łańcuchach) w C: \ SVNCode \ GlobalConnectV2 \ WebApplication.Mvc \ Startup.cs: linia 153
o Microsoft.AspNet.Authentication.Cookies.CookieAuthenticationHandler.d__9.MoveNext()
Więc to prowadzi mnie do przypuszczenia, że jej nie czyta klucza maszynowego. Mam to w pliku web.config w folderze wwwroot
<configuration>
<system.webServer>
...
</system.webServer>
<system.web>
<machineKey compatibilityMode="Framework20SP2" validation="SHA1" decryption="AES" validationKey="mykey" decryptionKey="dec" />
</system.web>
</configuration>
To działa na wcześniejsze aplikacje MVC ale zgadywania coś się zmieniło w MVC6. Próbowałem również następujących, ale bez powodzenia
services.ConfigureDataProtection(configure =>
{
configure.UseCryptographicAlgorithms(new Microsoft.AspNet.DataProtection.AuthenticatedEncryption.AuthenticatedEncryptionOptions()
{
EncryptionAlgorithm = Microsoft.AspNet.DataProtection.AuthenticatedEncryption.EncryptionAlgorithm.AES_256_CBC,
ValidationAlgorithm = Microsoft.AspNet.DataProtection.AuthenticatedEncryption.ValidationAlgorithm.HMACSHA256
});
});
Jakaś radę?
Dziękuję za rozwiązanie, to ułatwiło mi dzień. Czy mogę używać kodu źródłowego w moich projektach? Z góry bardzo dziękuję. – Anil
Część kodu deszyfrowania jest niesamowita i działa dobrze. Próbuję użyć części Encryption Twojego kodu, Masz pewien problem z sprawdzaniem poprawności podpisu. Czy działa dobrze po twojej stronie? Czy masz jakieś działające przykłady udostępniania – Anil
Szyfrowanie i odszyfrowywanie formularzyAuth Cookie działa teraz idealnie w AspDotNetCore +1 @Darrell – Anil