【问题标题】:How do I get DotNetOpenAuth to open a popup window for authentication?如何让 DotNetOpenAuth 打开一个弹出窗口进行身份验证?
【发布时间】:2010-10-11 15:56:43
【问题描述】:

我对 Web 开发比较陌生,所以这可能是一个菜鸟问题。我正在尝试建立一个 ASP.NET MVC 网站来实现 DotNetOpenAuth 作为 OpenID 依赖方。

现在一切正常,这非常令人兴奋。我的目标是让 OpenID 身份验证发生在一个弹出窗口中。当您将 WebForms 与 DNOA 自定义控件一起使用时,这似乎是默认行为,但我无法在 MVC 中弄清楚。

我以为我已经接近了:

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

但 UIRequest 的 Mode 字段是只读的。

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

感谢您的帮助。到目前为止,我一直无法找到任何实际的样本。

【问题讨论】:

    标签: asp.net-mvc-2 openid popup dotnetopenauth


    【解决方案1】:

    在我使用的 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>
    

    我希望这是有道理的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗨,Gazza,感谢您指出这一点。不幸的是,在我看来(我可能错了)NerdDinner 仍然通过使用 DNOA 提供的自定义控件来实现 OpenID。我希望在代码中实现我自己的解决方案。我读到 OpenID 提供者有一个设计标准,它告诉提供者在弹出窗口中执行身份验证,而不是在同一个窗口中。也许我误读了它,因为我无法找到调用它的方法。我引用的文章是 UX Flow 下的wiki.openid.net/Details-of-UX-Best-Practices-for-OPs#UXFlow
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2020-08-28
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多