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

C# 使用ASP.NET自动登录到外部网站并重定向,c#,asp.net-mvc,login,C#,Asp.net Mvc,Login,我们有一系列的产品 内置web服务器,每个服务器都有 一个登录页面,客户希望 创建他们登录的web门户 一次,从那里他们可以简单地 单击任何设备(外部) 网站),它将自动 登录到该站点并重定向它们 转到登录屏幕后的页面。 门户正在使用ASP.NET MVC 外部设备基于Windows CE 运行嵌入式web服务器的单元。 可以找到很多关于刮削的东西,但是没有 事件发生后,很多人开始关注重定向。 更多信息:为没有被邀请而道歉 足够详细,外部网站 使用自定义身份验证,它是一个 表单填充,然后与 中的

我们有一系列的产品 内置web服务器,每个服务器都有 一个登录页面,客户希望 创建他们登录的web门户 一次,从那里他们可以简单地 单击任何设备(外部) 网站),它将自动 登录到该站点并重定向它们 转到登录屏幕后的页面。 门户正在使用ASP.NET MVC 外部设备基于Windows CE 运行嵌入式web服务器的单元。 可以找到很多关于刮削的东西,但是没有 事件发生后,很多人开始关注重定向。 更多信息:为没有被邀请而道歉 足够详细,外部网站 使用自定义身份验证,它是一个 表单填充,然后与 中的自定义密码引擎 设备,使用脚本检测 结果良好,然后重定向 登录页面中的索引页面。 输入基本用户名和密码 进入表单,所有这些都设置为 在所有系统上都是一样的,所以可能很难 已编码,客户不需要密码 在每个设备上,但被 设备软件。饼干不存在 用过。基本上,用户是被呈现的 通过一系列指向所有 设备(基本上是网站) 他们点击他们想要的链接 转到主“索引”页,而不是 然后必须运行“登录” 页面


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

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

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

您可以准备创建httprequest的脚本,请查看

您可以准备创建httprequest的脚本,请查看

我使用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());
    }

我使用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());
    }

你没有提供足够的信息。这些外部网站使用什么样的身份验证机制?如何识别客户?正在使用饼干吗?客户端将如何从主门户导航到外部网站。是否有链接,或者他们可以手动输入地址?您没有提供足够的信息。这些外部网站使用什么样的身份验证机制?如何识别客户?正在使用饼干吗?客户端将如何从主门户导航到外部网站。是否会有链接,或者他们可以手动输入地址?我知道,服务器端处于“登录”状态,但无法将控制/会话传递给浏览器。我将尝试一个JavaScript解决方案,因为用户详细信息不是秘密的,只是登录不方便。感谢您的澄清。我理解,服务器端处于“登录”状态,但无法将该控件/会话传递给浏览器。我将尝试一个JavaScript解决方案,因为用户详细信息不是秘密的,只是登录不方便。谢谢你的澄清。