2009-06-01 8 views
26

Sto cercando informazioni su ASP.NET MVC e OpenId utilizzando il tutorial ASP.NET MVC NerdDinner.Richiesta di esercitazione per aggiungere supporto Openid a NerdDinner Applicazione ASP.NET MVC

Vorrei sostituire il sistema di autenticazione in NerdDinner solo con OpenId. Ho scaricato le ultime librerie DotNetOpenAuth ma non sono sicuro di come mettere tutto insieme. Qualcuno può aiutare con un rapido tutorial passo-passo?

È semplice come fare un salto nella libreria o ci sono cambiamenti significativi necessari anche per l'applicazione?

+1

+1 per un "io a" – Nifle

risposta

14

Una volta scaricato dotnetopenid, guardi negli Samples \ RelyingPartyMvc. Esiste un campione in cui sostituiscono il sistema di autenticazione MVC predefinito con OpenID. Il codice relativo è in Controllers/UserController.cs. Ecco l'azione di autenticazione:

//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

Ho scaricato il codice e letto attraverso le direzioni, ma non è ancora chiaro come tutto si combini. L'esempio NerdDinner ha l'accountController predefinito. I servizi di autenticazione e di appartenenza sono contenuti in AccountController. Il codice sopra riportato deve essere unito a quel controller? – TMC2K

+0

Il codice sopra riportato utilizza un controller chiamato UserController. Questo è fondamentalmente una sostituzione per l'AccountController. Dovresti semplicemente aggiornare i tuoi collegamenti o percorsi per puntare ad esso di conseguenza. – nikmd23

+0

Questo esempio sembra utilizzare il pacchetto dotnetopenid e non il nuovo pacchetto dotnetopenauth che lo ha sostituito. – itchi

0

C'è un kit di base di appartenenza su codeplex che dovrebbe essere quello che stai cercando. Dovrebbero entrambi seguire il modello del provider (leggendolo sopra) se seguono la convenzione di autenticazione microsoft.

http://mvcmembership.codeplex.com/

+1

Stai attento a questo. Sono passati diversi mesi e non si compilano più fuori dalla scatola. Spero che i proprietari del progetto lo rivedano presto. –

1

sguardo nella directory Samples/OpenIdRelyingPartyMvc (un semplice sito Web ASP.NET MVC che utilizza l'autenticazione OpenId). È possibile iniziare dalla copia di Home/User Controller/Visualizzazioni e impostazioni da web.config nel progetto. Penso che sia il modo più veloce per fornire l'autenticazione OpenId del tuo sito. Poi, as Alexander Prokofyev said, c'è molto utile posta al Andrew Arnott's (DotNetOpenAuth/DotNetOpenId author) blog-Add OpenID login support to your ASP.NET MVC site

6

Ok, quindi ho ottenuto questo tipo di lavoro! La risposta è una combinazione delle risposte sottostanti più un po 'di chiacchiere con i controller e le viste.

Prima download DotNetOpenAuth e quindi passare alla directory degli esempi in cui è possibile trovare il codice OpenIdRelayingPartyMvc. Nella mia soluzione NerdDinner,

  • ho aggiunto un riferimento all'assembly DotNetOpenAuth
  • Aggiunto nuovo un "UserController" e copiato nel codice dal UserController del campione
  • aggiunte le corrette istruzioni utilizzando e cambiato lo spazio dei nomi per riflettere NerdDinner.Controllers
  • ricreato le viste simili "Utente" dall'esempio, modificandole in modo appropriato per riflettere l'id del contenuto del sito master.
  • ha aggiunto una vista xrds sotto il controller di casa. (non si sa ancora cosa sia)
  • ha modificato l'indice e aggiunto i metodi ActionResult Xrds nell'HomeController per riflettere l'esempio.
  • cambiato il web.file di configurazione (nella cartella principale) Autenticare la sezione per modificare il percorso di accesso al nuovo metodo UserController e Login
  • Modificare gli ActionLink "LogOnUserControl" in modo che facciano riferimento ai nuovi metodi UserControl e "Login" e "Logout".
  • muck in giro con i vari punti di vista che chiamano direttamente il registro sulla funzionalità

In questo momento questo funziona in modo limitato. Posso accedere e interagire con l'app NerdDinner con un OpenID. Quindi è fantastico. Tuttavia alcune funzionalità non funzionano ancora. Salvare una cena creata non funziona ma non si blocca neanche. Dovrò indagare su come migrare alcune delle funzionalità di appartenenza in AccountController a UserController. Aggiornerò questo post (suggerimenti e suggerimenti benvenuti).