W pewnym kontekście pracuję nad aplikacją ASP.NET MVC 5, która wykorzystuje uwierzytelnianie oparte na OAuth przez implementację OWIN firmy Microsoft, tylko na Facebooku i Google. etap. Obecnie (od v3.0.0, git-commit 4932c2f), przy czym FacebookAuthenticationOptions
i GoogleOAuth2AuthenticationOptions
nie zapewniają żadnego majątku, aby wymusić Facebooka ani Google odpowiednio do ponownego uwierzytelnienia użytkowników (poprzez dodanie odpowiednich parametrów ciąg kwerendy) podczas logowania.ASP.NET MVC próbuje załadować starszą wersję zestawu Owin
początkowo wybrałem się do zastąpienia następujących klas:
FacebookAuthenticationOptions
GoogleOAuth2AuthenticationOptions
FacebookAuthenticationHandler
(konkretnieAuthenticateCoreAsync()
)GoogleOAuth2AuthenticationHandler
(konkretnieAuthenticateCoreAsync()
)
jeszcze odkrył, że ~AuthenticationHandler
klasy są oznaczone jako internal
.
Więc wyciągnąłem kopię źródła projektu Katana (http://katanaproject.codeplex.com/) i odpowiednio zmodyfikowałem źródło.
Po kompilacji, stwierdziliśmy, że istnieje wiele zależności, które wymagają aktualizacji w celu wykorzystania tych aktualizowane zestawy (Microsoft.Owin.Security.Facebook i Microsoft.Owin.Security.Google) w projekcie MVC:
- Microsoft.Owin
- Microsoft.Owin.Security
- Microsoft.Owin.Security.Cookies
- Microsoft.Owin.Security.OAuth
- Microsoft.Owin.Host.SystemWeb
Dokonano tego poprzez zastąpienie istniejących odniesień projektu do wersji 3.0.0 i aktualizowanie tych w pliku web.config. Dobra wiadomość: projekt pomyślnie się kompiluje.
diagnostykę, że otrzymał na starcie wyjątek:
wyjątek typu „System.IO.FileLoadException” w module [MVC wstęgowego zespołu] dll, ale nie traktowane kodu użytkownika
Informacje dodatkowe: Nie można załadować pliku lub zespołu "Microsoft.Owin.Security, wersja = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'lub jedna z jego zależności. Definicja manifestu zlokalizowanego złożenia nie pasuje do odwołania do zespołu. (Wyjątek od HRESULT: 0x80131040)
Podstawowym wyjątek wskazuje, że Microsoft.AspNet.Identity.Owin próbował załadować V2.1.0 z Microsoft.Owin.Security Dzwoniąc app.UseExternalSignInCookie()
z Startup.ConfigureAuth(IAppBuilder app)
w uruchamianiu. Auth.cs.
Niestety że montaż (i jego zależność od innych, Microsoft.AspNet.Identity.Owin) nie są częścią rozwiązania Projekt Katana, i nie mogę znaleźć żadnego dostępnego repozytorium dla tych zespołów w Internecie.
Are Microsoft.AspNet.Identity zespoły open source, jak projekt Katana? Czy istnieje sposób na oszukanie tych złożeń, aby użyć zwoływanych złożeń v3.0.0 zamiast v2.1.0? Folder
/bin
zawiera wersje 3.0.0 zespołów Owin.
mam uaktualnione pakiety Nuget dla Microsoft.AspNet.Identity.Owin, a to jest nadal problemem.
Wszelkie pomysły na rozwiązanie tego problemu?
Brzmi jak może zajść potrzeba zgromadzenia wiążącego przekierowanie. Przyjrzyj się temu jako przewodnikowi: http://rionscode.wordpress.com/tag/could-not-load-file-or-assembly-microsoft-owin/ –
Dziękuję, przeczytałem to i zdałem sobie sprawę, że powiązanie to przekierowuje mówi o zmianach wprowadzonych w web.config: ' " Sprawdziłem i zweryfikowaliśmy, że odwołania do złożeń są rzeczywiście w wersji 3.0.0.0, ale problem nadal występuje. –
@d_mcg - czy określono nazwy zestawów w powiązanym przekierowaniu? Potrzebne będzie wiążące przekierowanie dla każdy pakiet, który chcesz przekierować do odpowiedniej wersji. Czy rzeczywiście zaktualizowałeś swoje referencje w projekcie lub po prostu zastąpiłeś pliki .dll w folderze bin? – Tommy