2010-07-21 18 views
14

Do tej pory używałem niestandardowego dostawcy członkostwa do uwierzytelniania we wszystkich moich aplikacjach internetowych. Zaraz zacznę rozwijać moją pierwszą stronę za pomocą MVC. Zastanawiam się, czy powinienem użyć wbudowanego dostawcy członkostwa dostarczanego z ASP .NET MVC, czy też powinienem stworzyć swój własny. Moja strona musi zintegrować się z openidem, Facebookiem, Google itp. W celu uwierzytelnienia i openauth w celu uzyskania dostępu do interfejsu API. Zastanawiam się, jak łatwo byłoby użyć wbudowanego do moich potrzeb.Czy powinienem używać wbudowanego dostawcy członkostwa dla aplikacji ASP.NET MVC?

+1

Myślę, że prosząc dwa pytania. Budowanie dostawcy usług dla klientów i korzystanie z biblioteki takiej jak Janrain to dwie różne rzeczy. – jfar

+0

Właściwie nie zastanawiam się nad bibliotekami stron trzecich, takimi jak Janrain ... Chciałem wiedzieć głównie, czy powinienem użyć wbudowanego systemu członkostwa, czy wdrożyć własne (dla zwykłego uwierzytelniania). W dalszej perspektywie mogę rozważyć integrację z openidem itd. Ale potrzebuję podstawowego systemu logowania, który będzie działał w tej chwili. StackOverflow, na przykład zbudowany jest przy użyciu MVC. Jak wdrożyli swój system logowania? – Prabhu

Odpowiedz

25

Osobiście Nienawidzę pomocą ASP.NET Membership provider, które są dostępne w ramach podstawowej ... gdy utrzymuje się z serwerem bazy danych SQL. Wszystkie tabele i widoki są takim przesadą dla pojedynczej witryny. Dla firmy hostingowej? .. może ... ale dla wszystkich witryn korporacyjnych, które zrobiłem .. to był taki żenujący przeskok i kłopot. Jeśli chodzi o rzeczywisty interfejs dostawcy, itp. ... jest bardzo dobry .. ale nadal bardzo hardcore, itp. Przesadą dla prostych-średnich stron, IMO.

Osobiście użyłbym prostego niestandardowego kodu do obsługi utrzymywania członkostwa w większości podstawowych witryn.

Następnie przechodzi do drugiego pytania: OpenId. Użyj Andrew Arnotta w wersji DotNetOpenAuth .NET framework -> to zaśmiecający kopnięcie poważnego tyłka (tm). Używanie tego jest niezależne od JAK zapisujesz dane członkowskie użytkownika do repozytorium. To znaczy. jeśli posuwasz się naprzód i korzystasz z dostawcy Sql Server + ASP.NET Membership, nadal możesz (i powinieneś) używać DotNetOpenAuth. Jeśli masz prosty, niestandardowy sposób zapisywania danych użytkownika w bazie danych (co robię), nadal możesz korzystać z DotNetOpenAuth - te dwie są niezależne od siebie.

Tak więc, IMO, nie używaj zbyt skomplikowanych elementów programu ASP.NET Membership + Sql Server, ale prostą tabelę lub dwie, aby zapisać własne dane użytkownika. Następnie MUSISZ użyć DotNetOpenAuth do wszelkich rzeczy OpenId (StackOverflow używa DotNetOpenAuth do obsługi swoich loginów OpenId).

Powodzenia :)

(jestem pewien, że moi opnions od dostawcy ASP.NET Membership + SQL Server, aby utrzymywać te informacje spowodują kilka osób do frajerem-wściekłości, tutaj).

+2

+1 - Bardzo podoba mi się twoja odpowiedź, ponieważ pokazuje użycie właściwych narzędzi do pracy. Widziałem wiele projektów, w których zawierają zbyt skomplikowane dodatki, które są całkowicie przesadzone z tego, czego potrzebuje aplikacja. Prawie we wszystkich przypadkach, w których doświadczyłem tego, zazwyczaj okazuje się, że twórca chciał, aby nowa zabawka grała ... bez myślenia o tym, czy jest to właściwe dla danej pracy. – Dal

+1

Edytuj, proszę (nie mogę). To "segue", a nie "segway" ... chyba że mówisz o osobistym urządzeniu transportowym, które na zawsze zmieni sposób, w jaki dojeżdżamy do pracy w roku 2000. – xanadont

+2

Pozdrawiam @xanadont - po aktualizacji. –

13

Jeśli musisz zapytać, nie powinieneś pisać własnego operatora. Wykonanie zabezpieczenia jest bardzo trudne: naprawdę trudne. Błędne wykonanie jest niezwykle łatwe.

Dobra wiadomość jest taka, że ​​to, czego się chce, jest niezwykle powszechne i istnieją sprawdzone, gotowe do użycia narzędzia, które już to robią. Przykładem jest Janrain. Są też inne. Użyj istniejącego, sprawdzonego narzędzia, gdy tylko jest to możliwe.

+1

Istnieje również: http://code.google.com/p/dotnetopenid/ – jfar

4

Oto opcja, z której korzystam z powodzeniem.

Zasadniczo masz jednego użytkownika, który może być uwierzytelniony na wiele sposobów.

Korzystanie z wbudowanego dostawcy, który można oczywiście wyłączyć w dowolnym momencie, nie wyklucza uwierzytelniania tego użytkownika na wiele sposobów.

Gdy użytkownik dokonuje uwierzytelnienia za pomocą OpenID, Facebook itp., Dopasuj to logowanie do tabeli, która jest zgodna z określoną metodą logowania i tożsamością z tożsamością Forms, i po prostu ustaw użytkownika jako zalogowany z jego kanoniczną nazwą użytkownika.

Jeśli nowy użytkownik uwierzytelni się w Twojej witrynie i nie ma konta, po prostu automatycznie utwórz konto u dostawcy. Ustaw hasło dla losowych śmieci, ponieważ nigdy ich nie użyją. Pozwól im nadal kojarzyć z nią wiele typów logowania.

Jeśli użytkownik chce mieć również bezpośrednie logowanie, użyj standardowych mechanizmów resetowania haseł dostawcy członkostwa i podaj je.

Krótka historia: teraz używaj wbudowanego mechanizmu. Nie powstrzymuje cię to od robienia tego, co chcesz.

8

Zobacz, co się dzieje z NerdDinner. Niedawno (6 miesięcy temu) zostały zintegrowane z OpenID, a Google, Yahoo jako dostawcy oferowani. Wciąż zezwalają na wszystkie swoje "natywne" loginy. Oto przykład witryny umożliwiającej uwierzytelnianie użytkownika na różne sposoby.

Jeśli możesz odzwierciedlić niektóre z ich funkcjonalności, możesz przetasować na Facebooku, OpenAuth itp. Dużą korzyścią jest to, że jest już zaimplementowana w ASP.NET MVC, i po prostu musisz pożyczyć niektóre z tego wdrożenia.

+1

Awesome. Samouczek NerdDinner jest jednym z najlepszych pisemnych samouczków w historii. Czy mają samouczek dla mechanizmu logowania? – Prabhu

+0

@Prabhu: Nie widziałem samouczka ani instrukcji logowania, ale podejrzewam, że możesz skontaktować się z Jonem Galloway. Prawdopodobnie będzie mógł wskazać ci jakieś/jakiekolwiek zasoby dotyczące zapoznania się z systemem logowania, który mają. http://twitter.com/jongalloway –

1

Niedawno wprowadzony SimpleMembershipProvider rozwiązuje wiele problemów ze starszym członkostwem asp.net. Mianowicie łatwość użycia i kontrola nad schematem stołu użytkownika. To powinien być punkt wyjścia dla każdej nowej aplikacji (stan na 11/2012).

Zobacz poniższy link dla primera na SimpleMembershipProvider wraz z przyzwoitą historią na członkinie asp.net.

http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

Powiązane problemy