2009-06-01 7 views
26

Je cherche à apprendre sur ASP.NET MVC et OpenId en utilisant le tutoriel ASP.NET MVC NerdDinner.Demande de tutoriel pour ajouter le support Openid à l'application NerdDinner ASP.NET MVC

Je voudrais remplacer le système d'authentification de NerdDinner par OpenId uniquement. J'ai téléchargé les dernières bibliothèques DotNetOpenAuth mais je ne sais pas comment tout mettre ensemble. Quelqu'un peut-il aider avec un tutoriel rapide étape par étape? Est-ce aussi simple que de laisser tomber dans la bibliothèque ou y a-t-il aussi des changements significatifs nécessaires à l'application?

+1

+1 pour un "moi" – Nifle

Répondre

14

Une fois que vous téléchargez dotnetopenid, regardez dans les échantillons \ répertoire RelyingPartyMvc. Il y a un exemple où ils remplacent le système d'authentification MVC par défaut avec OpenID. Le code approprié est dans Controllers/UserController.cs. Voici l'action Authentifier:

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

J'ai téléchargé le code et lu les directions, mais on ne sait toujours pas comment tout cela s'accorde. L'exemple NerdDinner a le AccountController par défaut. L'authentification et les services d'appartenance sont contenus dans AccountController. Le code ci-dessus doit-il être fusionné avec ce contrôleur? – TMC2K

+0

Le code ci-dessus utilise un contrôleur appelé UserController. Ceci est fondamentalement un remplacement du AccountController. Vous devez simplement mettre à jour vos liens ou vos itinéraires pour les pointer en conséquence. – nikmd23

+0

Cet exemple semble utiliser le package dotnetopenid et non le nouveau paquet dotnetopenauth qui l'a remplacé. – itchi

0

Il existe un kit de démarrage d'adhésion sur codeplex qui devrait être ce que vous cherchez. Ils devraient tous les deux suivre le modèle du fournisseur (lire à ce sujet) s'ils suivent la convention d'authentification de Microsoft.

http://mvcmembership.codeplex.com/

+1

Méfiez-vous de celui-ci. Il est vieux de plusieurs mois et ne compile plus même hors de la boîte. Espérons que les propriétaires du projet le feront bientôt. –

1

Rechercher dans le répertoire Samples/OpenIdRelyingPartyMvc (un simple site Web ASP.NET MVC utilisant l'authentification OpenId). Vous pouvez commencer à copier Home/User Controllers/Views et settings from web.config dans votre projet. Je pense que c'est le moyen le plus rapide de donner à votre site l'authentification OpenId. Ensuite, as Alexander Prokofyev said, il est très utile après au Andrew Arnott's (DotNetOpenAuth/DotNetOpenId author) blog-Add OpenID login support to your ASP.NET MVC site

6

Ok, j'ai donc ce genre de travail! La réponse est une combinaison des réponses ci-dessous plus un peu de muck avec les contrôleurs et les vues.

Commencez par download DotNetOpenAuth puis accédez au répertoire d'exemples dans lequel vous trouverez le code OpenIdRelayingPartyMvc. Dans ma solution NerdDinner,

  • J'ai ajouté une référence à l'ensemble DotNetOpenAuth
  • a ajouté une nouvelle un « UserController » et copié dans le code de UserController
  • de l'échantillon ajouté les déclarations correctes à l'aide et a changé l'espace de noms pour refléter NerdDinner.Controllers
  • a recréé des vues «utilisateur» similaires à partir de l'exemple, en les modifiant de manière appropriée pour refléter les ID de contenu principal du site.
  • ajouté une vue xrds sous le contrôleur de la maison. (pas sûr de ce que cela fait encore)
  • changé l'index et ajouter les méthodes Xrds ActionResult dans le HomeController pour refléter l'échantillon.
  • a changé la toile.Fichier de configuration (dans le dossier racine) Section Authentifier pour modifier le chemin de connexion au nouveau UserController et méthode de connexion
  • Modifiez les liens Action "LogOnUserControl" pour pointer vers les nouvelles méthodes UserControl et "Connexion" et "Déconnexion".
  • muck autour avec les différentes vues qui appellent directement le journal sur la fonctionnalité

En ce moment, cela fonctionne de manière limitée. Je peux me connecter et interagir avec l'application NerdDinner avec un OpenID. Donc c'est cool. Cependant, certaines fonctionnalités ne fonctionnent pas encore. L'enregistrement d'un dîner créé ne fonctionne pas mais ne se bloque pas non plus. Je vais devoir étudier comment migrer une partie de la fonctionnalité d'appartenance dans AccountController à UserController. Je mettrai à jour cet article (suggestions et pointeurs bienvenus).

Questions connexes