4

Вопрос по asp.net-mvc-3, c# – Как пройти аутентификацию в приложении ASP.NET MVC из консольного приложения

У меня есть консольное приложение, которое отправляет XML в приложение MVC и получает другой XML в ответ. Работает отлично, но я хочу добавить авторизацию (по понятным причинам).

Вот код из консольного приложения:

using (var wc = new WebClient())
{
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

А вот код из приложения MVC:

public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

И это работает. Итак, для реализации авторизации я добавил следующий код:

Консоль (добавленаwc.Credentials):

using (var wc = new WebClient())
{
    wc.Credentials = new NetworkCredential("user", "password");
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

Приложение MVC (добавлено[Authorize]):

[Authorize]
public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

И это не работает. Я не знаю, нужна ли эта информация для решения этой проблемы, но мойweb.config имеет следующий элемент:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication> 

Фактически, файл, который отправляет приложение MVC, является HTML-кодом страницы входа в систему!

Что я должен сделать, чтобы решить это? Отсутствует ли какой-либо параметр вNetworkCredentials? Я знаю, что это может быть реализовано сdomain, но я не знаю, каков домен пользователей в приложении MVC.

И просто для уверенности: я заверил & quot; пользователя & quot; и & quot; пароль & quot; действительны.

  • Error: User Rate Limit Exceeded

    от Lucas Reis
  • Error: User Rate Limit Exceeded

    от Lucas Reis
  • Error: User Rate Limit Exceededwc.Headers.Add(HttpRequestHeader.Cookie, "somecookie");Error: User Rate Limit Exceeded

    от Lucas Reis
  • Error: User Rate Limit Exceeded

    от Lucas Reis
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Аутентификация с помощью форм не работает таким образом - она использует куки-файлы HTTP. Вам нужна встроенная проверка подлинности Windows или вам необходимо выполнить «вход в систему». сначала с помощью консольного приложения.

    от bzlm
  • 1

    Создать

    AuthenticationService который может быть использован для проверки подлинности форм. СClientBaseExtensions класс вы можете получить куки из вашего клиента службы WCF. Вставить этот файл cookie в другой вызов ...

    String cookies = null;
    var auth = new AuthenticationServiceClient();
    using (new OperationContextScope(auth.InnerChannel))
    {
        auth.Login("user", "password", null, true);
        cookies = auth.GetIncomingCookies();
    }
    

    Теперь вставьте данные cookie в вашу службу данных или в ваш HTTP-вызов.

    Увидетьhttp://mytoolkit.codeplex.com/wikipage?title=ClientBaseExtensions

  • 1

    Прежде всего

    вам необходимо пройти проверку подлинности при использовании проверки подлинности с помощью форм.

    Invoke the Logon Web Method and capture the Auth Cookie from the Http Response Set the Auth Cookie on the second Http Request to the DoSomething Method

    Или же    Установите режим аутентификации = & quot; Windows & quot; если вы находитесь в локальной сети!

  • 3

    Вы смешиваете типы учетных данных;

    wc.Credentials = new NetworkCredential("user", "password");
    

    для проверки подлинности HTTP.

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication> 
    

    это аутентификация форм.

    Они совершенно разные и не совместимы. Использование проверки подлинности с помощью форм из приложения командной строки является сложной задачей, вам необходимо перейти на страницу входа с запросом, отправить имя пользователя и пароль, а затем принять возвращаемый cookie-файл проверки подлинности и прикрепить его к последующим запросам.