Аутентификация API с помощью приложения Ionic

Я создаю приложение Ionic, которое должно взаимодействовать с приложением ASP net MVC (мне нужно получить данные JSON).

Когда я отправляю запрос в приложение ASP из приложения Ionic, меня не разрешают, потому что я не вошел в систему. Я получаю это:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access. The response had HTTP status code 401.

Моя проблема в том, что я хочу войти в свой API, но не знаю, как продолжить работу с Ionic. В аналогичном приложении я использовал клиент C# и объекты HttpWebRequest & NetworkCredential.

Я сделал запрос POST, чтобы попытаться войти в API, но получил ошибку 401. Вот код, но отправленные мной учетные данные не позволяют мне пройти аутентификацию в веб-службе.

connect(){

    var credentials = "name = " + mylogin + "&password = " + mypassword;
    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    this.http.post(URLServeur, credentials, {headers: headers}).subscribe(data => {
        if (data.json().success){
            console.info("yes");
            resolve(true);
        }
        else
        {
            console.info("no");
            resolve(false);
        }
    });
}

Спасибо,

Я уточняю, что даже когда я пытаюсь получить доступ к своему API из браузера, он запрашивает аутентификацию (логин и пароль). Это проверка подлинности Windows. Я хотел бы иметь возможность войти в систему из приложения Ionic с помощью почтового запроса.

bobier2 28.06.2018 16:26
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
0
1
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я наконец обнаружил, что это проблема в Angular с параметрами запроса. Если вы вставляете слишком много параметров запроса, withCredentials: true игнорируется.

Код в приложении Ionic:

var headers = new Headers();
    headers.append('Content-Type', 'application/json');
    var url = "http://localhost"
    var data = "This is my data";

    this.http.post(url, JSON.stringify(data), {withCredentials: true}).subscribe(data => {
        if (data){
            console.info("yes");
        }
        else
        {
            console.info("no");
        }
    });

Также не забудьте добавить это в файл webConfig на сервере:

    <httpProtocol>
     <customHeaders>
        <clear />
        <add name = "Access-Control-Allow-Origin" value = "http://localhost:8100" />
        <add name = "Access-Control-Allow-Headers" value = "content-Type,authorization" />
        <add name = "Access-Control-Allow-Methods" value = "GET,PUT,POST,DELETE,OPTIONS" />
        <add name = "Access-Control-Allow-Credentials" value = "true" />
     </customHeaders>
  </httpProtocol>

Я надеюсь это поможет другим людям

Чтобы было ясно, с Angular нет проблем. Вам нужно посмотреть, как HTTP-запросы работают в Angular, и у вас не будет этой проблемы.

Sergey Rudenko 30.06.2018 00:22

Другие вопросы по теме