您可以通过C#中的Webclient提供凭据吗?

您可以通过C#中的Webclient提供凭据吗?,c#,cas,C#,Cas,我需要访问位于中央身份验证服务器后面的php页面。使用任何其他方式,当我尝试访问此站点时,它会重定向到CAS页面,等待身份验证。本质上,我向身份验证页面提供GET变量。(不希望。)不幸的是,我们无法删除此页面的CA,因为这是一个巨大的安全风险 所以我的问题是,是否有任何方法可以向CAS提供我必须的凭据,存储其中的任何cookie,然后使用它访问php页面 我的尝试如下: 因为我使用的是GET方法,所以我不需要担心等待到php页面提供值,我只需要实际访问页面,我们称之为https://site.c

我需要访问位于中央身份验证服务器后面的php页面。使用任何其他方式,当我尝试访问此站点时,它会重定向到CAS页面,等待身份验证。本质上,我向身份验证页面提供
GET
变量。(不希望。)不幸的是,我们无法删除此页面的CA,因为这是一个巨大的安全风险

所以我的问题是,是否有任何方法可以向CAS提供我必须的凭据,存储其中的任何cookie,然后使用它访问php页面

我的尝试如下:

因为我使用的是
GET
方法,所以我不需要担心等待到php页面提供值,我只需要实际访问页面,我们称之为
https://site.com/page.php?var1=value1&var2=value2

根据建议,我创建了一个类
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())

不幸的是,这仍然没有将我登录到CAS,结果作为CAS的HTML返回


有人知道我怎么解决这个问题吗?谢谢您的帮助。

我不知道CAS是否支持标准的HTTP即开即用身份验证。它通常基于表单

在被重定向到CAS后,您需要解析/刮取页面中的一些隐藏表单变量。发布这些参数、用户名和密码(以及GET请求返回的cookie)

CAS应返回HTTP重定向。(将有一个额外的cookie添加到集合中:CASTGC cookie。)webclient应将您重定向回最初请求的资源。有些应用程序可能需要两次跳跃才能返回


如果您将在web应用程序会话的生命周期内轮询资源,请使用相同的CookieCollection进行后续调用,您不应该再次对CAS进行身份验证。

是否要共享该网站?并不是说我对堆栈溢出有怀疑,但我担心这样做可能会破坏我的NDA。没关系,规则是小鬼!
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");