2010-10-11 14 views
2

Je suis relativement nouveau dans le développement web, donc c'est peut-être une question de débutant. J'essaye de mettre en place un site Web d'ASP.NET MVC pour implémenter DotNetOpenAuth en tant que partie de confiance d'OpenID.Comment obtenir DotNetOpenAuth pour ouvrir une fenêtre d'authentification?

À l'heure actuelle, tout fonctionne, ce qui est très excitant. Mon but était cependant de faire en sorte que l'authentification OpenID ait lieu dans une fenêtre contextuelle. Cela semble être le comportement par défaut lorsque vous utilisez WebForms avec les contrôles personnalisés DNOA, mais je n'ai pas pu le comprendre dans MVC.

Je pensais que je devenais terminerai là-dessus:

var request = OpenIdRp.CreateRequest(id); 
request.AddExtension(new UIRequest(Mode = UIModes.Popup)); 

Mais le champ Mode de UIRequest est en lecture seule.

Est-ce que quelqu'un sait comment créer une requête qui demande au fournisseur OpenID d'ouvrir une fenêtre contextuelle?

Merci pour toute aide. Jusqu'à présent, j'ai été incapable de retrouver des échantillons de ceci en action.

Répondre

1

Le site Nerddinner a exactement ce dont vous avez besoin. Il est écrit en MVC, et vous pouvez télécharger le code source ici: http://nerddinner.codeplex.com/.

+0

Hey Gazza, Merci de l'avoir signalé. Malheureusement, il me semble (je peux me tromper) que NerdDinner implémente toujours OpenID en utilisant les contrôles personnalisés fournis par DNOA. J'espérais implémenter ma propre solution dans le code. J'ai lu qu'il existe une norme de conception pour les fournisseurs OpenID qui dit au fournisseur d'effectuer l'authentification dans une fenêtre contextuelle, plutôt que la même fenêtre. Peut-être que je le fais mal, parce que je n'ai pas été capable de trouver un moyen de l'invoquer. L'article auquel je fais référence est http://wiki.openid.net/Details-of-UX-Best-Practices-for-OPs#UXFlow sous UX Flow. – user472457

2

Sur la v.3.4.5 j'utilise, la propriété Mode de l'UIRequest a à la fois getter et setter.

var req = openid.CreateRequest(openid_identifier);      

        // Add UI Request 
        if (req.DiscoveryResult.IsExtensionSupported<UIRequest>()) 
        { 
         req.AddExtension(new UIRequest() 
         { 
          Mode = UIModes.Popup 
         }); 

Vous devez créer le popup vous-même. Une fois l'authentification effectuée, vous devez actualiser la fenêtre parent et fermer la fenêtre contextuelle. À la soumission du formulaire je

<form action="/Account/OpenIdLogOn" target="popupWin" onsubmit="return openWindow('/Account/OpenIdLogOn', 'popupWin', 500, 500);"> 

function openWindow(url, wname, width, height) { 
    window.open(url, wname, "height=" + height + ",width=" + width + "location = 0, status = 1, resizable = 0, scrollbars=1, toolbar = 0"); 
    return true; 
} 

et à la vue des résultats je le javascript suivant

<script type="text/javascript"> 
     $(function() { 
      if (window.opener) { 
       window.opener.location.href = window.opener.location.href; 
       window.close(); 
      } 
     }); 
    </script> 

J'espère que cela a du sens.