使用 Windows.Web.Http.HttpClient 传递 .ASPXAuth 身份验证 cookie
Passing .ASPXAuth authentication cookie using Windows.Web.Http.HttpClient
我正在尝试调用 Web API 来验证登录。这是有效的,header 响应包含 .ASPXAuth。当我调用 Web 上的下一个方法时 API 我得到了 403。
为了解决这个问题,我尝试从身份验证响应的 header 中获取 .ASPXAuth 身份验证,并将其添加到下一个请求的 header 中(如下所示) .
IHttpContent content = new HttpStringContent(@"{ ""domain"": ""DomainName"", ""username"": ""theUserName"", ""password"": ""thePassword"" }", UnicodeEncoding.Utf8, "application/json");
// Send
using (var client = new Windows.Web.Http.HttpClient.HttpClient())
{
var result = await client.PostAsync(new Uri("https://192.168.1.112/api/auth/login"), content);
result.EnsureSuccessStatusCode();
var authResult = await result.Content.ReadAsStringAsync();
client.DefaultRequestHeaders.Add("set-cookie", result.Headers["set-cookie"]);
var itemResult = client.GetAsync(new Uri("https://192.168.1.112/api/item/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}"));
var itemData = itemResult.GetResults();
}
我已经用下面的代码解决了这个问题。
验证并返回验证 cookie
public async Task<HttpCookie> AuthenticateAsync()
{
var filter = new HttpBaseProtocolFilter();
using (var client = new HttpClient(filter))
{
var authDetails = BuildJsonAuthDetails();
var authResult = await client.PostAsync(new Uri(BaseUrl + "/auth/login"), authDetails);
authResult.EnsureSuccessStatusCode();
return filter.CookieManager.GetCookies(new Uri(BaseUrl + "/auth/login")).FirstOrDefault(x => x.Name == ".ASPXAUTH");
}
}
通过下一个 post
传递 Auth cookie
public async Task<string> GetUserDetailsAsync(string userUniqueIdentifier, HttpCookie authCookie)
{
var filter = new HttpBaseProtocolFilter();
filter.CookieManager.SetCookie(authCookie);
using (var client = new HttpClient(filter))
{
var itemResult = await client.GetAsync(new Uri(BaseUrl + "/Person/" + userUniqueIdentifier));
itemResult.EnsureSuccessStatusCode();
return = await itemResult.Content.ReadAsStringAsync();
}
}
我正在尝试调用 Web API 来验证登录。这是有效的,header 响应包含 .ASPXAuth。当我调用 Web 上的下一个方法时 API 我得到了 403。
为了解决这个问题,我尝试从身份验证响应的 header 中获取 .ASPXAuth 身份验证,并将其添加到下一个请求的 header 中(如下所示) .
IHttpContent content = new HttpStringContent(@"{ ""domain"": ""DomainName"", ""username"": ""theUserName"", ""password"": ""thePassword"" }", UnicodeEncoding.Utf8, "application/json");
// Send
using (var client = new Windows.Web.Http.HttpClient.HttpClient())
{
var result = await client.PostAsync(new Uri("https://192.168.1.112/api/auth/login"), content);
result.EnsureSuccessStatusCode();
var authResult = await result.Content.ReadAsStringAsync();
client.DefaultRequestHeaders.Add("set-cookie", result.Headers["set-cookie"]);
var itemResult = client.GetAsync(new Uri("https://192.168.1.112/api/item/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}"));
var itemData = itemResult.GetResults();
}
我已经用下面的代码解决了这个问题。
验证并返回验证 cookie
public async Task<HttpCookie> AuthenticateAsync()
{
var filter = new HttpBaseProtocolFilter();
using (var client = new HttpClient(filter))
{
var authDetails = BuildJsonAuthDetails();
var authResult = await client.PostAsync(new Uri(BaseUrl + "/auth/login"), authDetails);
authResult.EnsureSuccessStatusCode();
return filter.CookieManager.GetCookies(new Uri(BaseUrl + "/auth/login")).FirstOrDefault(x => x.Name == ".ASPXAUTH");
}
}
通过下一个 post
传递 Auth cookie public async Task<string> GetUserDetailsAsync(string userUniqueIdentifier, HttpCookie authCookie)
{
var filter = new HttpBaseProtocolFilter();
filter.CookieManager.SetCookie(authCookie);
using (var client = new HttpClient(filter))
{
var itemResult = await client.GetAsync(new Uri(BaseUrl + "/Person/" + userUniqueIdentifier));
itemResult.EnsureSuccessStatusCode();
return = await itemResult.Content.ReadAsStringAsync();
}
}