我需要访问一个位于中央身份验证服务器后面的php页面。使用任何其他方法,当我尝试访问此站点时,它会重定向到CAS页面,等待身份验证。基本上,我向验证页面提供了GET
个变量。 (不要。)遗憾的是,我们无法删除此页面的CAS,因为它存在巨大的安全风险。
所以我的问题是,无论如何都要向CAS提供我的凭据,存储任何cookie,然后使用它,访问php页面?
我的尝试如下:
由于我使用GET
方法,我不需要担心等到我在php页面提供值,我只需要实际访问页面,我们' ll致电https://site.com/page.php?var1=value1&var2=value2
正如WebClient accessing page with credentials建议的那样,我创建了一个班级CookieAwareClient
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
{
CookieContainer = new CookieContainer();
}
public CookieContainer CookieContainer { get; private set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = CookieContainer;
return request;
}
}
然后提交以下内容:
使用(var client = new CookieAwareWebClient())
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{"username", "usr" },
{"password", "(passw0rd!)"}, //don't worry. not actual information
};
//This should bring me to the login page, which will upload the values I have given
client.UploadValues("https://site.com/page.php?var1=value1&var2=value2", values);
string result = client.DownloadString("https://site.com/page.php?var1=value1&var2=value2");
遗憾的是,这仍然没有将我登录到CAS中,结果将作为CAS的HTML返回。
有没有人知道我是如何解决这个问题的?谢谢你的帮助。
答案 0 :(得分:0)
我不知道CAS是否支持开箱即用的标准HTTP身份验证。它通常是基于表格的。
重定向到CAS后,您需要解析/抓取页面中的一些隐藏表单变量。 POST这些参数,用户名和密码(以及通过GET请求返回的cookie)。
CAS应该返回HTTP重定向。 (将在集合中添加一个额外的cookie:CASTGC cookie。)webclient应该将您重定向回最初请求的资源。有些应用可能需要两次才能回来。
如果要在Web应用程序会话的生命周期内轮询资源,请使用相同的CookieCollection进行后续调用,并且不应再次对CAS进行身份验证。