Asp.net mvc 2 如何让DotNetOpenAuth打开一个弹出窗口进行身份验证?

Asp.net mvc 2 如何让DotNetOpenAuth打开一个弹出窗口进行身份验证?,asp.net-mvc-2,openid,popup,dotnetopenauth,Asp.net Mvc 2,Openid,Popup,Dotnetopenauth,我对web开发比较陌生,所以这可能是一个新手问题。我正在尝试建立一个ASP.NET MVC网站,以实现作为OpenID依赖方的DotNetOpenAuth 现在一切正常,所以这很令人兴奋。不过,我的目标是在弹出窗口中进行OpenID身份验证。这似乎是将WebForms与DNOA自定义控件一起使用时的默认行为,但我在MVC中还没有弄清楚 我以为我已经接近这个目标了: var request = OpenIdRp.CreateRequest(id); request.AddExtension(new

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

现在一切正常,所以这很令人兴奋。不过,我的目标是在弹出窗口中进行OpenID身份验证。这似乎是将WebForms与DNOA自定义控件一起使用时的默认行为,但我在MVC中还没有弄清楚

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

var request = OpenIdRp.CreateRequest(id);
request.AddExtension(new UIRequest(Mode = UIModes.Popup));
但是UIRequest的Mode字段是只读的

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


谢谢你的帮助。到目前为止,我还无法找到这方面的任何样本。

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

在我使用的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
                        });
在结果视图中,我有以下javascript

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

$(函数(){
if(窗口开启器){
window.opener.location.href=window.opener.location.href;
window.close();
}
});

我希望这是有意义的。

嘿,加扎,谢谢你指出这一点。不幸的是,在我看来(我可能错了),NerdDinner仍然使用DNOA提供的自定义控件实现OpenID。我希望用代码实现我自己的解决方案。我读到有一个OpenID提供者的设计标准,它告诉提供者在弹出窗口中执行身份验证,而不是在同一窗口中。也许我误读了它,因为我还没有找到调用它的方法。我引用的文章在UX流程下。
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;
}
    <script type="text/javascript">
        $(function () {
            if (window.opener) {
                window.opener.location.href = window.opener.location.href;
                window.close();
            }
        });
    </script>