2009-06-01 5 views
26

Szukam informacji o ASP.NET MVC i OpenId przy użyciu samouczka ASP.NET MVC NerdDinner.Poproś o samouczek, aby dodać obsługę Openid do aplikacji NerdDinner ASP.NET MVC

Chciałbym zastąpić system uwierzytelniania w NerdDinner, aby był tylko OpenId. Pobrałem najnowsze biblioteki DotNetOpenAuth, ale nie jestem pewien, jak to wszystko połączyć. Czy ktoś może pomóc w szybkim samouczku krok po kroku?

Czy to tak proste, jak upuszczenie w bibliotece, czy też potrzebne są znaczące zmiany w aplikacji?

+1

+1 za "mnie" – Nifle

Odpowiedz

14

Po pobraniu dotnetopenid, patrzeć w próbkach \ Directory RelyingPartyMvc. Istnieje przykład, w którym zastępują domyślny system uwierzytelniania MVC przez OpenID. Odpowiedni kod znajduje się w Controllers/UserController.cs. Oto akcja Uwierzytelnij:

//Stage 1: Show form asking for Open ID identifier URL 
var openid = new OpenIdRelyingParty(); 
if (openid.Response == null) { 
    // Stage 2: user submitting Identifier 
    Identifier id; 
    if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) { 
      openid.CreateRequest(Request.Form["openid_identifier"]).RedirectToProvider(); 
    } else { 
      ViewData["Message"] = "Invalid identifier"; 
      return View("Login"); 
      } 
} else { 
    // Stage 3: OpenID Provider sending assertion response 
    switch (openid.Response.Status) { 
     case AuthenticationStatus.Authenticated: 
      FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, false); 
      break; 
     case AuthenticationStatus.Canceled: 
      ViewData["Message"] = "Canceled at provider"; 
      return View("Login"); 
     case AuthenticationStatus.Failed: 
      ViewData["Message"] = openid.Response.Exception.Message; 
      return View("Login"); 
    } 
} 
return new EmptyResult(); 
+0

Pobrałem kod i przeczytałem wskazówki, ale nadal nie jest jasne, jak to wszystko razem pasuje. Próbka NerdDinner ma domyślny AccountController. Usługi uwierzytelniania i członkostwa są zawarte w AccountController. Czy powyższy kod musi zostać scalony z tym kontrolerem? – TMC2K

+0

Powyższy kod wykorzystuje kontroler o nazwie UserController. Jest to w zasadzie zamiennik do AccountController. Trzeba tylko zaktualizować linki lub trasy, aby odpowiednio do tego wskazać. – nikmd23

+0

Ten przykład wydaje się używać pakietu dotnetopenid, a nie nowszego pakietu dotnetopenauth, który go zastąpił. – itchi

0

Istnieje zestaw startowy dla członków na codeplex, który powinien być tym, czego szukasz. Powinny one zarówno postępować zgodnie z modelem dostawcy (czytaj na nim), jeśli postępują zgodnie z konwencją uwierzytelniania Microsoft.

http://mvcmembership.codeplex.com/

+1

Uważaj na ten. Jest kilka miesięcy przestarzały i nie jest już gotowy do kompilacji. Mam nadzieję, że właściciele projektu wkrótce to odtworzą. –

1

Look w katalogu Samples/OpenIdRelyingPartyMvc (prosta strona internetowa ASP.NET MVC z wykorzystaniem uwierzytelniania OpenId). Możesz zacząć od kopiowania Dom/Kontrolery użytkownika/Widoki i ustawienia z web.config do swojego projektu. Myślę, że jest to najszybszy sposób, aby nadać swojej stronie uwierzytelnianie OpenId. Następnie as Alexander Prokofyev said, jest bardzo przydatny post na Andrew Arnott's (DotNetOpenAuth/DotNetOpenId author) blog - Add OpenID login support to your ASP.NET MVC site

6

OK, więc mam taki rodzaj pracy! Odpowiedź jest kombinacją poniższych odpowiedzi plus trochę mucking z kontrolerów i widoków.

Najpierw download DotNetOpenAuth, a następnie przejdź do katalogu przykładów, w którym można znaleźć kod OpenIdRelayingPartyMvc. W moim rozwiązanie NerdDinner,

  • I dodaje odniesienie do zespołu DotNetOpenAuth
  • dodano nowe się „UserController” i skopiowany kod z próbki za UserController
  • dodany poprawnych wypowiedzi używania i zmianie nazw aby odzwierciedlić NerdDinner.Controllers
  • odtworzyć podobne widoki "User" z próbki, zmieniając je odpowiednio, aby odzwierciedlić identyfikator treści głównej witryny.
  • dodał widok xrds pod kontrolerem macierzystym. (nie wiesz, co to jeszcze zrobiło)
  • zmieniła indeks i dodała metody ActionResult Xrds w HomeController, aby odzwierciedlić próbkę.
  • zmieniła sieć.plik konfiguracyjny (w folderze głównym) Sekcja uwierzytelniania, aby zmienić ścieżkę logowania do nowej kontrolki UserController i logowania. Zmień "ActionLinks" LogOnUserControl, aby wskazywały nowe metody UserControl i "Login" oraz "Logout".
  • syf wokół z różnych widoków, które bezpośrednio wywołać dziennik na funkcjonalności

Teraz działa to w ograniczonym zakresie. Mogę zalogować się i współpracować z aplikacją NerdDinner za pomocą OpenID. To jest świetne. Jednak niektóre funkcje jeszcze nie działają. Zapisanie utworzonej kolacji nie działa, ale też się nie zawiesza. Będę musiał zbadać, jak przenieść niektóre funkcje członkostwa w AccountController do UserController. Zaktualizuję ten post (sugestie i mile widziane wskaźniki).

Powiązane problemy