命令行应用程序,IIS需要表单身份验证

时间:2011-10-11 08:31:41

标签: asp.net-mvc forms-authentication

我们正在构建一个命令行应用程序,它需要使用表单身份验证从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:

ASP.NET Authorization from Console Application & Timeout

1 个答案:

答案 0 :(得分:0)

您想在客户端本地模仿身份验证代码吗?我认为你走错了路。

您应该将服务器工作(cookie生成)留给服务器。发出两个后续请求:一个带有您的登录信息(服务器将生成一个cookie),另一个带有提供的cookie。