gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:45 25 4
gpt4 key购买 nike

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

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

我的尝试如下:

因为我使用的是 GET 方法,所以我不需要担心等到 php 页面才提供值,我只需要实际访问页面,我们称之为 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 形式返回。

有人知道我如何解决这个问题吗?谢谢你的帮助。

最佳答案

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

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

CAS 应该返回一个 HTTP 重定向。 (将有一个额外的 cookie 添加到集合中:CASTGC cookie。)web 客户端应该将您重定向回最初请求的资源。某些应用可能需要两跳才能返回。

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

关于c# - 您可以通过 C# 中的 Webclient 提供凭据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17170860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com