Угловой запрос, притворяющийся аналогом Почтальона (?) - PullRequest
0 голосов
/ 06 декабря 2018

Я пишу приложение для Angular, которое пытается получить доступ к JIRA Cloud API.Самая большая стена, на которую я натолкнулся, - это проблема CORS, не позволяющая мне получать данные.На данный момент я изменил свои настройки Chrome, чтобы игнорировать предполетные запросы и смог получить почти все необходимые данные.

Проблема в том, что для получения рабочих журналов по проблемам мне нужносоздать запрос POST.На этот раз я получаю код ошибки 403 с ответом «Ошибка проверки XSRF».Перед тем, как создать запрос в Angular, я проверил его с помощью Postman, и он отлично работает.

Если CORS относится к клиенту, а не к серверу, что, вероятно, имеет место, как я могу «обмануть»сервер, так что он отвечает на мой запрос, как если бы он был отправлен почтальоном?На данный момент я попытался настроить прокси-сервер nginx, чтобы мое приложение запрашивало localhost, который затем перенаправлялся с сервера nginx в облако JIRA.Это все еще не работает, хотя.

Все методы кроме этого одного POST работают.

Вот мои методы класса Angular 6 HttpService:

getFullResponse(domain: string, projectName: string, credentials: Credentials) {
    console.log('GET FULL RESPONSE');

    return this.http.get('https://' + domain + '.atlassian.net/rest/api/3/project/' + projectName,
      {
        headers: new HttpHeaders({'Authorization': 'Basic ' + btoa(credentials.username + ':' + credentials.password)}),
        observe: 'response'
      }
    );
  }

  testGET(credentials: Credentials) {
    return this.http.get('http://localhost/worklog/deleted', {
      headers: new HttpHeaders({
        'Authorization': 'Basic ' + btoa(credentials.username + ':' + credentials.password),
        'Content-Type': 'application/json',
        'X-Atlassian-Token' : 'nocheck'
      }),
      observe: 'response'
    })
  }

  testPOST2(credentials: Credentials){
    console.log('HTTP POST TEST FIRED');

    return this.http.post('http://localhost/worklog/list', '{ \"ids\" : [ 10001, 10002 ]}', {
      headers: new HttpHeaders({
        'Authorization': 'Basic ' + btoa(credentials.username + ':' + credentials.password),
        'Content-Type': 'application/json',
        'X-Atlassian-Token' : 'nocheck'
      }),
      observe: 'response'
    })

И это файл nginx.config, который я пытаюсь использовать:

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass https://thetestdomain.atlassian.net/rest/api/3/;

            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
        }
...
}

I 'Я совершенно новичок в nginx, это первый раз, когда я пытаюсь прокси-запросы, поэтому, возможно, что-то здесь не так.Является ли это даже правильным подходом к моей просьбе «притвориться» просьбой почтальона?

...