使用ASP.NET自动登录外部网站并重定向

时间:2010-06-05 08:57:48

标签: c# asp.net-mvc login

  

我们有一系列产品   内置在每个都有的Web服务器中   一个登录页面,一个客户想要的   创建一个他们记录的Web门户   一次,从那里他们可以简单地   点击任何设备(外部   网站),它会自动   登录该站点并重定向它们   到登录屏幕后的页面。   门户网站正在使用ASP.NET MVC   外部设备是基于Windows CE的   运行嵌入式Web服务器的单元   可以在刮擦上找到很多,但不是   在事件发生后重定向很多。   更多信息:抱怨不存在   详细,外部网站   使用自定义身份验证,它是一个   表格填写,然后与a谈话   自定义密码引擎   设备,使用脚本来检测是否   结果很好,然后重定向   登录页面的索引页面。   输入基本用户名和密码   形式,所有这些都设置为   所有系统都一样,所以很难   编码,客户不想要密码   在每个设备上,但被迫   设备软件。没有饼干   用过的。基本上,用户被呈现   与所有的一系列链接   设备(网站本质上)何时   他们点击他们想要的链接   取而代之的是主要的“索引”页面   然后必须运行“登录”   页。

更新:已经成功设法导航目标站点并使用HttpWebRequest和HttpWebResponse登录,所以我现在在HttpWebResponse中加载了正确的页面,剩下的问题是我现在如何重定向或打开一个新的浏览器来显示该HttpWebResponse和继续在登录的目标站点上导航。

3 个答案:

答案 0 :(得分:1)

如果您使用的是basic authentication,则无法进行此操作。正如您所见,您可以执行HttpWebRequest并传递凭据,但这是在服务器端完成的,您无法继续导航。它的工作方式是浏览器需要设置基本身份验证使用的凭据头,这只能使用登录弹出窗口完成。某些类型的IE可能支持以下URL:http://username:password@somesite.com提供凭据,但由于显而易见的原因,不确定是否可以与其他浏览器一起使用。

答案 1 :(得分:0)

您可以准备脚本,创建httprequest,试试看 GreaseMonkey script to auto login using HTTP authentication

答案 2 :(得分:0)

我使用WPF Web浏览器控件实现了以下功能,以自动登录到站点。我发现,为了能够在没有授权标题丢失或删除的情况下导航网站,我必须执行以下操作,否则每个新页面都会再次提示用户。此解决方案也不需要用户:password @ site语法启用。

    private bool _redirected = false;
    private const string BaseUrl = @"http://mySite";

    private void Navigate()
    {
        var helpUrl = BaseUrl;
        var authHeader = GetAuthHeader();

        _docWindow.Browser.Navigate(helpUrl, string.Empty, null, authHeader);           
        _docWindow.Browser.Navigating += Browser_Navigating;

    }

    private string GetAuthHeader()
    {
        byte[] authData = UnicodeEncoding.UTF8.GetBytes(_userName + ":" + _password);
        string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData);
        return authHeader;
    }

    void Browser_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
    {            
        if (_redirected)
        {
            _redirected = false;
            return;
        }
        var newPage = BaseUrl + e.Uri.AbsolutePath;

        e.Cancel = true;
        _redirected = true;
        _docWindow.Browser.Navigate(newPage, string.Empty, null, GetAuthHeader());
    }