2010-07-22 5 views
1

Supposons que j'ai une application Web MyApp. Lorsque j'accède à cette application web, j'ai saisi les informations d'authentification de l'utilisateur (nom d'utilisateur et mot de passe), puis à partir de ce site, je souhaite visiter un autre site SaySite qui demandera également l'authentification. La même authentification devrait convenir aux deux sites. Donc, je veux passer les données d'authentification de l'utilisateur sur MyApp à YourSite dans le code. Ensuite, j'écris un gestionnaire http comme:Comment passer l'authentification de l'utilisateur lors de la visite d'une autre URL?

public void ProcessRequest(HttpContext context) 
{ 
    string url = "http://YourSite/page/...";    
    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url); 
    CredentialCache myCache = new CredentialCache();       
    NetworkCredential netCredential = new NetworkCredential("myname", "mypassword", ""); 

    myCache.Add(new Uri(url), "Basic", netCredential); 
    myCache.Add(new Uri(url), "Digest", netCredential); 
    myCache.Add(new Uri(url), "Negotiate", netCredential); 
    myReq.Credentials = myCache; 
      //..... 
} 

Mais je ne veux pas définir le nom d'utilisateur et mot de passe dans le code, je veux transmettre des données d'authentification des utilisateurs actuels à VotreSite.

Comment implémenter cette requête?

========= Moro info sur ma situation: MyApp est l'application wep Asp.NET fonctionnant sous IIS (authentification Windows). YourSite est une application Java fonctionnant sur Tomcat dans une autre zone. Les deux applications sont configurées pour utiliser le compte d'utilisateur Windows Active Directory sur le même serveur de domaine Windows.

============ Plus d'infos: je change le code ci-dessus comme (essayez d'utiliser des titres de compétences en cours):

public void ProcessRequest(HttpContext context) 
    { 
     string url = "http://YourSite/page/...";    
     HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url); 
     myReq.Credentials = CredentialCache.DefaultCredentials; 

     //..... 
    } 

mais ne peut pas passé l'authentification.

+0

Quel type d'authentification vous utilisez sur votre application pour authentifier les utilisateurs (NTLM, Forms, Kerberos, Basic, Digest, OpenID, Passeport, Google Auth, autre chose)? Que diriez-vous du site distant? –

+0

J'utilise l'authentification Windows (NTLM) dans MyApp. Sur IIS pour MyApp, également configuré en tant que Windows Authenticaton. – KentZhou

Répondre

0

Pourriez-vous utiliser un iframe de 1 pixel par 1 pixel du site Web MyApp sur la page YourSite, puis transmettre des informations via javascript/ajax? Je suppose que j'irais avec le commentaire de Darin et suggérerais OpenID, mais cela pourrait être une option. Je n'ai pas essayé, donc laissez-moi savoir si cela fonctionne :)

+0

Merci. Mais je n'ai aucune chance de mettre quelque chose sur YourSite qui est un produit tiers. – KentZhou

0

Si vos applications s'exécutent sur le même domaine de premier niveau (myapp.abc.com et yourapp.abc.com), il serait facile de en utilisant l'authentification par formulaire et fournisseur d'appartenances en mettant simplement dans vos applications web.config:

Asp.net forms authentication and multiple domains

Scott Gu's Blog

Si les domaines sont différents, vous pouvez utiliser l'authentification unique (chanter signe sur) comme solutions: http://singlesignon.codeplex.com/