2010-06-05 8 views
1

Nous avons une série de produits avec intégrés dans les serveurs web dont chacun a une page de connexion, un client veut créer un portail Web dans lequel ils log en une seule fois, à partir de là, ils peuvent simplement cliquez sur l'un des appareils ( sites Web externes) et il se connectera automatiquement à ce site et les rediriger à la page après l'écran de connexion. Le portail utilise ASP.NET MVC, les périphériques externes sont des unités Windows CE exécutant des serveurs Web intégrés. Peut trouver beaucoup de grattage, mais pas beaucoup sur la redirection après l'événement. Plus d'info: Toutes mes excuses pour ne pas être assez détaillés, les sites Web externes utilisant l'authentification personnalisé, il est un remplissage de formulaire , qui parle alors à un moteur de mot de passe personnalisé dans le dispositif , utilise le script pour détecter si les résultats sont bons alors redirige le la page d'index de la page de connexion. nom d'utilisateur de base et mot de passe entré en forme, qui sont tous mis à même sur tous les systèmes, peuvent donc être difficiles codés, le client ne veut pas le mot de passe sur chaque appareil, mais est forcé par le logiciel de l'appareil . Les cookies n'étant pas utilisés. Fondamentalement, l'utilisateur est présenté avec une série de liens vers tous les périphériques (sites Web essentiellement) quand ils cliquent sur le lien qu'ils veulent être pris à la page "index" plutôt plutôt puis doivent exécuter le "login " page.Utiliser ASP.NET se connecter automatiquement à un site Web externe et rediriger

Mise à jour: Ont réussi à naviguer dans le site cible et vous connecter en utilisant HttpWebRequest et HttpWebResponse, donc je maintenant la bonne page chargée dans un HttpWebResponse, reste la question est de savoir comment rediriger maintenant ou ouvrir un nouveau navigateur pour afficher HttpWebResponse et continuez à naviguer sur le site cible connecté.

+0

Vous n'avez pas fourni suffisamment d'informations. Quel type de mécanisme d'authentification est utilisé par ces sites Web externes? Comment les clients sont-ils identifiés? Les cookies sont-ils utilisés? Comment les clients vont-ils naviguer du portail principal vers les sites Web externes? Est-ce qu'il y aura un lien ou ils peuvent entrer l'adresse manuellement? –

Répondre

1

Si vous utilisez basic authentication cela ne sera pas possible. Comme vous l'avez vu, vous pouvez effectuer un HttpWebRequest et transmettre des informations d'identification, mais cela est fait côté serveur et vous ne pouvez pas continuer à naviguer. La façon dont cela fonctionne est que le navigateur doit définir les en-têtes d'informations d'identification utilisés par l'authentification de base et cela ne peut être fait en utilisant la fenêtre de connexion. Certaines versions de IE peuvent prendre en charge l'URL suivante: http://username:[email protected] pour fournir des informations d'identification, mais elles ne sont pas sûres de travailler avec d'autres navigateurs pour des raisons évidentes.

+0

Je comprends, côté serveur dans "connecté" mais aucun moyen de transmettre ce contrôle/session au navigateur. Je vais essayer une solution JavaScript car les détails de l'utilisateur ne sont pas secrets, juste la connexion est gênant. Merci pour la clarification. – DoodleWalker

0

je mis à exécution les suivantes à l'aide du contrôle de navigateur Web WPF pour la connexion automatique à un site. J'ai trouvé que pour pouvoir naviguer sur le site sans que l'en-tête d'autorisation ne soit perdu ou supprimé, j'ai dû faire ce qui suit sinon pour chaque nouvelle page à laquelle l'utilisateur a été invité à nouveau. Cette solution ne nécessite pas non plus la syntaxe de l'utilisateur: password @ site à activer.

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()); 
    } 
Questions connexes