通过一次登录(并使用IFrame)对两个单独的站点进行身份验证。可能?

时间:2009-10-03 10:37:28

标签: asp.net authentication iframe cookies

目前在ASP.NET MVC中构建一个站点,并且必须在IFrame中集成其中的另一个站点。客户希望两个系统都有一个登录,因此用户登录父站点,然后在IFramed站点上自动进行身份验证。当然,如果这是可能的,那么可以假设两组登录凭证都是相同的。那么,无论如何这可以轻松完成吗?

值得注意的是,我们对IFramed网站没有任何真正的控制权。它基本上是我们的客户为其客户提供处理付款的网站。

提前致谢!

1 个答案:

答案 0 :(得分:2)

(我认为OpenID或WS * -Federation是不可能的?)

如果凭据相同,您是否只能在提交自己的登录表单之前将凭据提交给iframe?

或者,如果您想首先检查凭据,然后将它们发送到您的服务器,请将它们作为javascript片段返回给客户端,然后执行iframe身份验证。 (但请注意,您将凭据发送回客户作为javascript 。)

可能适合您的示例:

说明您的登录网址为http://yourdomain/login,您还需要登录http://thirdparty/login

yourdomain / login想要两个帖子变量“username”和“pwd”,而thirdparty / login想要“uname”和“password”。

尝试在项目中包含jQuery(有很多方法可以在javascript中自行完成,但是你必须检查jQuery在后台做什么 - 但我强烈建议你不要重新发明轮子如果你没有到)。

// this is the jQuery startup function, called once the page is loaded
$(function()
{
    // register an event for the form submit
    $("form[@action*='login']").submit(function(event){  
        // get username and pwd from the form
        var _user = $("#username").val();
        var _password = $("#pwd").val();

        // and submit to the second login page
        $.post("http://thirdparty/login", { user: _user, password: _password } );

        // once the method returns and you don't do return false then the login form     will be submitted as usual.
    });  

});

这里可能存在一个问题,即您要发布到与提供该页面的服务器不同的URL。这可能是不允许的,但您可以通过将原始登录页面的发布操作发送到第三方页面并使用上面的代码登录到您自己的系统来绕过它。

参考: JQuery Post:http://docs.jquery.com/Ajax/jQuery.post JQuery拦截表单提交:http://blog.james-carr.org/2008/01/17/jquery-binding-submit-on-a-forms-action-attribute/