Токен OAuth не авторизован в браузере - PullRequest
1 голос
/ 19 апреля 2019

Я использую Angular 7, и у меня возникла проблема с заголовками.

Это мой код:

    signin() {
    let signinData = this.signinForm.value;

    this.encoded = btoa("my-trusted-client:secret");

    let header = new Headers();

    header.append('Authorization', 'Basic ' + this.encoded);

    header.append('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');

    this.http.post(this.url + '/oauth/token?grant_type=password&username=' + signinData.username + '&password=' + signinData.password, { headers: header })
    .subscribe(data => {
      console.log(data);
     })
    }

Ошибка вывода:

ошибка: «Unauthorized»

сообщение: «Unauthorized»

path: «/ barometre / oauth / token»

статус: 401

отметка времени: «2019-04-19T12: 35: 47.699 + 0000 "

Когда я тестировал его на Почтальоне, я получил результаты: enter image description here

Редактировать:

Проблема была в подписи запроса.Я изменил это:

this.http.post(this.url + '/oauth/token?grant_type=password&username=' + signinData.username + '&password=' + signinData.password, { headers: header })

По этому:

this.http.post(this.url + '/oauth/token', params, { headers: header })

с

let params: URLSearchParams = this.serialize (this.data);

и сгенерировать новую функцию

serialize(obj: any): URLSearchParams {
        let params: URLSearchParams = new URLSearchParams();

        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                var element = obj[key];
                params.set(key, element);
            }
        }
        return params;
        console.log(params);
    };

Ответы [ 2 ]

3 голосов
/ 19 апреля 2019

Вам нужно передать HttpHeaders в post. Отметьте здесь

const header= {
  headers: new HttpHeaders({
    'Content-Type':  'application/x-www-form-urlencoded; charset=utf-8',
    'Authorization': 'Basic ' + this.encoded
  })
};

Также убедитесь, что ваш токен авторизации действителен.

1 голос
/ 19 апреля 2019

Проблема была в подписи запроса. Я изменил это:

this.http.post(this.url + '/oauth/token?grant_type=password&username=' + signinData.username + '&password=' + signinData.password, { headers: header })

По этому:

this.http.post(this.url + '/oauth/token', params, { headers: header })

с

let params: URLSearchParams = this.serialize (this.data);

и сгенерировать новую функцию

serialize(obj: any): URLSearchParams {
        let params: URLSearchParams = new URLSearchParams();

        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                var element = obj[key];

                params.set(key, element);
            }
        }
    return params;
    console.log(params);
    };
...