登录到域A,然后使用域A的域B的cookie

时间:2014-06-03 17:07:07

标签: c# cookies

我正在使用CookieAwareWebClient登录并与Web API交互。我的客户端在子域中具有登录服务,而API在不同的子域中(或者在不同的域上完全不确定)。但它们的不同之处在于客户端一旦设置就不会传入cookie。请看下面......

//call the web client
CookieAwareWebClient client = new CookieAwareWebClient();
client.BaseAddress = @"WEB_API_DOMAIN_NAME";

//establish login data
Dictionary<string, string> loginData = new Dictionary<string, string>();
loginData.Add("username", SCSettings.Default.username);
loginData.Add("password", SCSettings.Default.password);

//create login string from dictionary
string loginJson = JsonConvert.SerializeObject(loginData);

//begin login
string bouncerBaseUri = @"LOGIN_SERVICE_DOMAIN_NAME";
string bouncerUri = String.Format(@"{0}v1/auth/session/", bouncerBaseUri);
client.UploadString(bouncerUri, "POST", loginJson);

//test... NOM NOM NOM cookies
//Uri cookieUri = new Uri(bouncerBaseUri);
//Cookie sessionCookie = Helpers.GetSpecificCookie(client.CookieContainer, cookieUri, "bouncer");

//fails... cookie is not passed
string test = client.DownloadString("/api/reports/v1/reportconfig/");

1 个答案:

答案 0 :(得分:0)

想出来......我需要在不同的Uri下将cookie添加到容器中。

//get the cookie
Uri loginUri = new Uri(bouncerBaseUri);
Cookie sessionCookie = Helpers.GetSpecificCookie(client.CookieContainer, loginUri , "bouncer");

//add to the container under a different Uri
Uri webApiBaseUri = new Uri(client.BaseAddress);
client.CookieContainer.Add(webApiBaseUri, sessionCookie);

GetSpecificCookie只返回指定的Cookie

public static Cookie GetSpecificCookie(CookieContainer cookieJar, Uri domain, string cookieName)
{
    CookieCollection scCookies = cookieJar.GetCookies(domain);
    Cookie cookie = scCookies[cookieName];

    return cookie;
}