Конфигурация ATS на Node.js с Express.js на Https - PullRequest
0 голосов
/ 18 мая 2018

У меня есть сервер node.js , который должен получать вызовы json от приложения node.js, которое использует экспресс для управления маршрутизаторами, приложение iOS выполняет вызовы к маршрутизаторам, передающим значения json,Я также добавляю, что если я работаю в http, у меня нет никаких проблем!

Моя проблема в том, что я не могу настроить Apple ATS.Как мне это сделать?

Ниже я ввел и код, и информацию, связанную с Info.plist.

Ошибка:

ATS Default Connection
2018-05-18 08:54:14.070 nscurl[7310:57407] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Result : FAIL
---

Swift:

func Login(Username: String, Password: String, completion: @escaping (Int) -> ())
    {
        let semaphore = DispatchSemaphore(value: 1)
        semaphore.wait()
        let db = Database() /* https://172.16.53.247:8989 */
        let json: [String: Any] = ["Username": "" + Username, "Password": "" + Password]
        let jsonData = try? JSONSerialization.data(withJSONObject: json)
        var request = URLRequest(url: URL(string: db.GetServerURL() + "/login")!)
        request.httpMethod = "POST"
        request.httpBody = jsonData
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "No data")
                completion(0)
                return
            }
            let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
            if let responseJSON = responseJSON as? [String: Any] {
                let read = responseJSON["return"]!
                let IdUser=Int(String(describing: read))!
                if (IdUser > 0) {

                    completion(IdUser)
                }
                else {
                    completion(0)
                }
            }

        }
        task.resume()
        semaphore.signal()
    }

Node.js Сервер:

const fs = require('fs');
const http = require('http');
const https = require('https');
const express = require('express');

const port = 8989;

const options = {
    key: fs.readFileSync('./Config/server-key.pem'),
    cert: fs.readFileSync('./Config/server-cert.pem'),
};

var app = express();

var server = https.createServer(options, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

app.get('/', function (req, res) {
    res.writeHead(200);
    res.end("hello world\n");
});


module.exports = app;

Конфигурация ATS: enter image description here

1 Ответ

0 голосов
/ 18 мая 2018

Я искал решение вашей проблемы и обнаружил проблему, заключающуюся в том, что исключения ATS не работают с IP-адресами.

Итак, я нашел два возможных решения:

1) Преобразование вашего IP-адреса в реальное доменное имя.Вы можете использовать сервис xip.io для «преобразования» локального IP-адреса в доменное имя.

2) В целом отключить ATS:

<key>NSAppTransportSecurity</key>
   <dict>
       <key>NSAllowsArbitraryLoads</key>
       <true/>
   </dict>

Хотя известно, что это решение уязвимо для 1017 *, это единственное решение, которое я бы порекомендовал при разработке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...