Définir des biscuits dans un service WCF
-
13-11-2019 - |
Question
J'ai une application ASP MVC consommant des services de repos de WCF (tout sur la même boîte).Pour les appels d'authentification, J'essaie de mettre des cookies à l'intérieur d'un service de repos de WCF.
code sur le côté client -
HttpResponseMessage resp;
HttpClient client = new HttpClient("http://localhost/auth/login/");
resp = client.Get();
Dans le Webservice, j'utilise simplement des formulaires pour définir une autorisation.
HttpCookie authCookie = FormsAuthentication.GetAuthCookie("foo", false);
HttpContext.Current.Response.Cookies.Add(authCookie);
En supposant que les informations d'identification sont cotées en papier dans le code - si je navigue physiquement au navigateur
http://localhost/auth/login
(informations d'identification du code durs dans le code) Je peux voir que le cookie d'authentification est en cours de configuration.Toutefois, si je viens d'invoquer le Code (comme indiqué ci-dessus), le cookie d'authentification n'est pas défini.
Y a-t-il quelque chose d'évident que je suis surplombant ici?
La solution
Lorsque vous appelez le service WCF de manière programmable, le cookie IL SETS est stocké dans l'instance httpClient.Le navigateur client ne le voit jamais, il n'est donc jamais placé à l'intérieur.Donc, vous aurez besoin de la définir manuellement:
using (var client = new HttpClient("http://localhost/auth/login/"))
{
var resp = client.Get();
// Once you get the response from the remote service loop
// through all the cookies and append them to the response
// so that they are stored within the client browser.
// In this collection you will get all Set-Cookie headers
// sent by the service, so find the one you need and set it:
foreach (var cookie in result.Headers.SetCookie)
{
// the name of the cookie must match the name of the authentication
// cookie as you set it in your web.config.
var data = cookie["SomeCookieName"];
Response.AppendCookie(new HttpCookie("SomeCookieName", data));
}
}