我们正在构建一个命令行应用程序,它需要使用表单身份验证从IIS服务器获取一些数据。如何从命令行应用程序进行表单身份验证?我已经尝试过,但所有发生的事情都是请求被重定向到登录页面。
我猜测如果我可以使用正确的凭证包含身份验证cookie,那么下载就可以了。
我可以控制客户端和服务器。我可以在web.config中设置machineKey,但无法弄清楚如何在命令行应用程序中设置它。这必须与以正确格式加密cookie的validationKey相同吗?
服务器是用asp-net mvc。
编写的var request = (HttpWebRequest)WebRequest.Create(uri);
var formsCookiePath = "/";
var cookieName = ".FormName";
var domain = "localhost";
var username = "username";
var password = "pa$$word";
var ticket = new FormsAuthenticationTicket(1,
username,
DateTime.Now,
DateTime.Today.AddYears(10),
true,
password,
formsCookiePath);
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var authenticationCookie = new Cookie(
cookieName,
encryptedTicket,
formsCookiePath,
domain)
{
HttpOnly = true,
Secure = false
};
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(authenticationCookie);
request.UserAgent = "Internal downloader";
var loWebResponse = (HttpWebResponse)request.GetResponse();
更新: 基于Zruty的答案,我使用此示例生成身份验证cookie:
答案 0 :(得分:0)
您想在客户端本地模仿身份验证代码吗?我认为你走错了路。
您应该将服务器工作(cookie生成)留给服务器。发出两个后续请求:一个带有您的登录信息(服务器将生成一个cookie),另一个带有提供的cookie。