如何让DotNetOpenAuth打开一个弹出窗口进行身份验证?

时间:2010-10-11 15:56:43

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

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

现在它全部运转,所以非常令人兴奋。我的目标是让OpenID身份验证发生在弹出窗口中。当您将WebForms与DNOA自定义控件一起使用时,这似乎是默认行为,但我无法在MVC中找到它。

我以为我已经接近这个了:

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

但UIRequest的Mode字段是只读的。

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

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

2 个答案:

答案 0 :(得分: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>

我希望这是有道理的。

答案 1 :(得分:1)

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