2010-10-11 76 views
2

我对web开发比较陌生,所以也许这是一个菜鸟问题。我试图建立一个ASP.NET MVC网站来实现DotNetOpenAuth作为一个OpenID依赖方。如何让DotNetOpenAuth打开弹出窗口进行身份验证?

现在它正在运转,所以这非常令人兴奋。我的目标是让OpenID认证成为一个弹出窗口。这似乎是您在使用带有DNOA自定义控件的WebForms时的默认行为,但我无法在MVC中找到它。

我想我是越来越接近这个:

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

但UIRequest的模式字段是只读的。

有没有人知道如何创建一个告诉OpenID提供者打开一个弹出窗口的请求?

感谢您的任何帮助。到目前为止,我一直无法找到任何此类实例。

回答

1

Nerddinner网站正是你所需要的。它是用MVC编写的,你可以在这里下载源代码:http://nerddinner.codeplex.com/

+0

嘿Gazza,谢谢你指出。不幸的是,在我看来(我可能是错的),NerdDinner仍然使用DNOA提供的自定义控件来实现OpenID。我希望在代码中实现我自己的解决方案。我读过OpenID提供者的设计标准,它告诉提供者在弹出窗口而不是同一个窗口中执行验证。也许我误解了它,因为我一直无法找到调用它的方法。我正在引用的文章是UX Flow下的http://wiki.openid.net/Details-of-UX-Best-Practices-for-OPs#UXFlow。 – user472457 2010-10-16 09:35:14

2

在我使用的v.3.4.5中,UIRequest的Mode属性同时具有getter和setter。

var req = openid.CreateRequest(openid_identifier);      

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

您必须自己创建弹出窗口。身份验证发生后,您应该刷新父窗口并关闭弹出窗口。 在表单的提交我

<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; 
} 

,并在结果视图我有以下的javascript

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

我希望这是有道理的。