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?

Était-ce utile?

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));
    }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top