我已准备好许多关于身份验证的SO文章,但无法使我的应用程序正常运行。我试图通过服务器REST api向服务器提供身份验证凭据以访问资源。当使用Sharepoint REST api(使用SharePointOnlineCredentials,最着名的是类的GetAuthenticationCookie方法)时,我能够做到这一点,但我相信我在此应用程序中的问题是缺少正确配置的身份验证cookie。我的代码供参考......
public static async Task<string> GetWebPageProjectData(string url)
{
string username = "SampleUser@Domain.com";
string password = "SamplePassword#!";
var credential = new System.Net.NetworkCredential(username, securePassword, "Domain");
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
HttpResponseMessage response = null;
/* THE ISSUE IS THE LACK OF AN AUTHENTICATION COOKIE !?!?! */
try
{
using (var handler = new HttpClientHandler { Credentials = credential })
{
var uri = new Uri("http://webpage/location");
// ***WORKS W/ SP credentials ***handler.CookieContainer.SetCookies(uri, credential.GetAuthenticationCookie(uri));
//handler.CookieContainer.SetCookies() What I think needs to be done in some way, shape, or form!?!?
using (var client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Add("Authorization", "basic" + encoded);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata=nometadata"));
var query = url;
response = await client.GetAsync($"{query}").ConfigureAwait(false);
return await response.Content.ReadAsStringAsync();
}
}
}//end try
catch (HttpRequestException)
{
return null;
}
catch (ArgumentNullException)
{
return null;
}
catch (CookieException)
{
return null;
}
}
我已尝试使用相同结果的此代码的众多变体(preAuthenticate,使用代理..)。最终我最终登录了我公司设置的登录页面,因为这是一个内部网Web应用程序......我在这里缺少什么?