Как пройти аутентификацию пользователя при посещении другого URL-адреса?

Предположим, у меня есть веб-приложение MyApp. Когда я получаю доступ к этому веб-приложению, у меня есть входная информация для аутентификации пользователя (имя пользователя и пароль), а затем с этого сайта я хочу посетить другой сайт, скажем, YourSite, который также будет запрашивать аутентификацию. Одинаковая аутентификация должна подойти для обоих сайтов.

Итак, я хочу передать данные аутентификации пользователя в MyApp на YourSite в коде. Затем я пишу обработчик http, например:

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;
            //.....
}

Но я не хочу устанавливать имя пользователя и пароль в коде, я хочу передать текущие данные аутентификации пользователя на YourSite.

Как реализовать этот запрос?

========== Подробнее о моей ситуации: MyApp - это веб-приложение Asp.NET, работающее на IIS (проверка подлинности Windows). YourSite — это приложение Java, работающее на Tomcat на другом компьютере. Оба приложения настроены на использование учетной записи пользователя Windows Active Directory на одном сервере домена Windows.

============ Дополнительная информация: я изменяю приведенный выше код как (попробуйте использовать текущие учетные данные):

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

       //.....
    }

но не может пройти аутентификацию.


person KentZhou    schedule 22.07.2010    source источник
comment
Какую аутентификацию вы используете в своем приложении для аутентификации пользователей (NTLM, Forms, Kerberos, Basic, Digest, OpenID, Passport, Google Auth, что-то еще)? Как насчет удаленного сайта?   -  person Darin Dimitrov    schedule 23.07.2010
comment
Я использую аутентификацию Windows (NTLM) в MyApp. В IIS для MyApp также настроена как проверка подлинности Windows.   -  person KentZhou    schedule 23.07.2010


Ответы (2)


Не могли бы вы использовать iframe размером 1 пиксель на 1 пиксель веб-сайта MyApp на странице YourSite, а затем передавать информацию через javascript/ajax? Полагаю, я бы согласился с комментарием Дарина и предложил OpenID, но это может быть вариантом. Я не пробовал, так что дайте мне знать, если это работает :)

person Kyle B.    schedule 22.07.2010
comment
Спасибо. Но у меня нет возможности размещать что-либо на YourSite, поскольку это сторонний продукт. - person KentZhou; 23.07.2010

Если ваши приложения работают в одном и том же домене верхнего уровня (myapp.abc.com и yourapp.abc.com), было бы легко использовать аутентификацию с помощью форм и поставщика членства, просто установив в своих приложениях web.config:

Аутентификация форм Asp.net и несколько доменов

Блог Скотта Гу

Если домены разные, вы можете использовать решения SSO (sing sign on), например: http://singlesignon.codeplex.com/

person Amir Pournasserian    schedule 23.07.2010