Korzystanie z OpenID (poprzez DotNetOpenAuth) wraz z rolami użytkowników i innymi funkcjami dostawcy członkostwa

Buduję ASP.NET strona MVC, gdzie chcę użyć DotNetOpenAuth do implementacji logowania OpenID (całkowicie rezygnuję z logowania opartego na nazwie użytkownika/haśle).

Do tej pory pisałem mój kod dla domyślnego systemu nazwy użytkownika/hasła z ASP.NET dostawca członkostwa, wykorzystując system ról, system profilu i podstawowy system rejestracji. Teraz, w mojej migracji do OpenID, przewiduję pewne problemy, w szczególności z powiązaniem z kontrolą członkostwa dostarczone przez ASP.NET dostawca członkostwa .

Patrząc na próbkę DotNetOpenAuth MVC, widzę, że jedynymi odwołaniami do systemu FormsAuthentication są utworzenie AuthCookie, a później wywołanie FormsAuthentication.SignOut(). Dlatego nie jestem pewien, czy mogę użyć ASP.NET dostawca członkostwa działa z tym systemem OpenID, chociaż inna część przykładowego kodu wywołuje User.Identity.IsAuthenticated.


Czy ten interfejs systemu OpenID z ASP.NET dostawca członkostwa? jeśli nie, Czy mogę jakoś naprawić to?

Jeśli powyższe jest całkowicie niemożliwe, myślę, że moim następnym krokiem będzie po prostu roll moje własne tabele bazy danych i ręcznie napisać kod, aby z nich korzystać z mojego kontrolera konta. Zauważyłem, że Stack Exchange Data Explorer przyjmuje takie podejście, ale czy byłby to właściwy sposób działania?


EDIT: dla pewności używam poprawnej terminologii, by "ASP.NET Membership Provider", mam na myśli dostawcę, który korzysta z tabele generowane przez narzędzie aspnet_regsql.exe.

Author: Anas, 2010-07-10

1 answers

Będą dobrze współpracować, ale będziesz musiał wykonać trochę niestandardowej pracy.

To co robiłem w przeszłości to:

OpenID OpenID to implementacja, która pozwala na otrzymanie tożsamości od dostawcy openid, ale po prostu nie jest pewna, co z nią zrobić.

Nadal używam FormsAuthentication jako zaplecza, nawet bez używania go do uwierzytelniania.

Będziesz potrzebował tabeli bazy danych, która pozwoli Ci powiązać FormsAuthentication user to one or more openids. Możesz po prostu zapisać nazwę Użytkownika Formularzyauthentication (która jeszcze nie istnieje) z identyfikacyjnym adresem URL otrzymanym od dostawcy openid. Wywołamy tę tabelę AUTH

Gdy ktoś uwierzytelni Twoją stronę za pomocą openid sprawdź, czy istnieje w tabeli AUTH. Jeśli nie, musisz zrobić dwie rzeczy. Zadzwoń Do Członkostwa.CreateUser () przekazuje dowolną wygenerowaną nazwę użytkownika (lub adres e-mail, jeśli jest podany przez openid). I user a GUID dla hasła, ponieważ nie będzie ono używane. W tym samym czasie umieścić wpis w tabeli AUTH mapowanie użytkownika członkostwa do tożsamości potwierdzonej OpenID.

Gdy ktoś uwierzytelni Twoją witrynę za pomocą otwartego identyfikatora i już istnieje formularz wywołania.RedirectFromLoginPage z nazwą użytkownika powiązaną z openid i wszystkie odpowiednie bilety uwierzytelniania zostaną ustawione.

Teraz możesz używać wszystkich ładnych wbudowanych obiektów bezpieczeństwa, tak jak zawsze wcześniej implementacja openid.

Edytuj: Dodatkową zaletą tej konfiguracji jest możliwość w przyszłości zezwalania na logowanie nazwy użytkownika/hasła.

Możesz również wymienić swojego dostawcę członkostwa w dowolnym momencie.

Ponadto, wiele do jednego charakteru tabeli AUTH pozwala łatwo powiązać wiele identyfikatorów OpenID.

 40
Author: jwsample,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 22:38:25