Пользователи проходят аутентификацию в службе REST WCF (моей).Учетные данные отправляются через AJAX в формате Javascript и JSON.Служба ответит OK и небольшой информацией (URL-адрес перенаправления) клиенту при аутентификации.
Теперь есть новый метод для внешней аутентификации, и мне нужно создать небольшой фрагмент кода, который легковставить и запустить внутри метода файла кода asp.net.
Типичный запрос wcf может закончиться так:
http://testuri.org/WebService/AuthenticationService.svc/ExtLogin?cId=197&aId=someName&password=!!pwd
Мой фрагмент кода до сих пор,
protected void bn_Click(object sender, EventArgs e)
{
WebHttpBinding webHttpBinding = new WebHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress(url);
ContractDescription cd =
ContractDescription.GetContract(typeof(IAuthenticationService));
ServiceEndpoint sep = new ServiceEndpoint(cd);
sep.Behaviors.Add(new WebHttpBehavior());
sep.Address = endpointAddress;
sep.Binding = webHttpBinding;
var resp = new ChannelFactory<IAuthenticationService>(sepREST).CreateChannel();
LoginResult result = resp.ExtLogin(cId, aId, hashPwd);
Response.Redirect(result.RedirectUri);
// I.e. http://testuri.org/Profile.aspx (Require authenticated to visit)
}
Я получаю правильный аутентифицированный ответ в объектах resp / result.Итак, общение в порядке.При перенаправлении на реальный сайт я не авторизован.Я не могу найти проблему?Если я возьму указанный выше URI (с действительными учетными данными) и вставлю его в URL-адрес веб-браузера, а затем вручную введу uri, я буду аутентифицирован.
Я потратил день на поиски в сети, но безуспешно,
Существует много информации, но, похоже, ни одна из них не применима.
Чего мне не хватает?
Я также попробовал другой подход, но та же проблема сохраняется.
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uriWithParameters);
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Method = "GET";
string result;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
result = reader.ReadToEnd();
JavaScriptSerializer jsonDeserializer = new JavaScriptSerializer();
LoginResult contact = jsonDeserializer.Deserialize<LoginResult>(result);
Response.Redirect(result.RedirectUri);