Jak zezwolić na wiele metod uwierzytelniania w ASP.NET?

Buduję nową aplikację ASP.NET MVC (w języku C #), a jednym z wymagań jest utworzenie nowej bazy danych członków. W tym celu potrzebujemy ról do zarządzania różnymi typami członków i profili, aby zarządzać dodatkowymi metadanymi dołączonymi do każdego członka. Do tej pory tak dobrze, użyj standardowego MembershipProvider, RoleProvider i ProfileProvider dostarczonego jako część .NET Framework.

Problemem jest jednak to, że chciałbym zezwolić na różne metody uwierzytelniania. Chciałbym, aby konta i poświadczenia logowania posiadały relację jeden do wielu (jedno konto może mieć dołączoną liczbę danych logowania). Na przykład użytkownik może mieć konto OpenID i ActiveDirectory dołączone do swojego konta.

Jednak po eksperymentach z kilkoma sposobami zdecydowaliśmy się na trasę MembershipProvider (wyjaśniono, w jaki sposób osiągnięto to jako odpowiedź poniżej).

Moje pytanie brzmi: jak ludzie robili to wcześniej i jak ludzie sugerują, że się do tego zbliżam? Wydaje się, że jest to coś, co osiąga się w wielu witrynach, ale wyszukiwanie tutaj nie zwraca niczego solidnego do zabawy.

EDYCJA: Po rozejrzeniu się przez dobry okres godzin nocnych i dziś rano - wciąż nie jestem przekonany, że zajęcie jednego MembershipProvider byłoby najłatwiejszą opcją. Czy posiadanie wielu dostawców członkostwa daje ten sam efekt?

EDYCJA BOUNTY: Bez odpowiedzi zakładam, że nie ma bardziej optymalnego rozwiązania niż to, które zamieściłem jako odpowiedź. Czy tak jest w rzeczywistości? Oferuję nagrodę za próbę sprawdzenia, czy ktoś ma jakieś dalsze przemyślenia na ten temat i czy istnieją lepsze alternatywy.

EDYCJA BOUNTY: Myślę, że WIF jest odpowiedzią zaakceptowaną poniżej, dla wersji .NET 4 i może innych wersji, ponieważ prawdopodobnie działa z 3.5. Poza tym, może zaatakowany lub zaadaptowany członek MembershipProvider może być nadal istotny.

questionAnswers(3)

yourAnswerToTheQuestion