Как отправить OAuth2 POST-запрос с Angular 6, с правильными заголовками? - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно отправить почтовый запрос на сервер авторизации Spring Boot OAuth 2, чтобы получить токен JWT?Используя Почтальон, я получил токен, и Auth Server работает нормально.Но с Angular мне трудно понять правильный формат почтового запроса?

Это текущий метод, который я использую.

login() {
  const url = 'http://localhost:9090/oauth/token';

  const data = {
    'grant_type': 'password',
    'username': 'username',
    'password': 'password'
  };

  const reqH = new HttpHeaders({
    'Content-Type': 'application/x-www-urlencoded',
    'Authorization': 'Basic ' + btoa('client-id' + ':' + 'secret'),
    'grant_type': 'password',
    'username': 'administrator%40divinedragon.com',
    'password': 'password'
  });

  return this.http.post('http://localhost:9090/oauth/token', data, {
    headers: reqH
  });
}

при использовании этого метода я получаю следующую ошибку.

HttpErrorResponse {headers: HttpHeaders,status: 400, statusText: «OK», url: «http://localhost:9090/oauth/token", ok: false,…},

error: {error:« invalid_request », описание_ошибки:« Отсутствует тип предоставления »}

Помощь с благодарностью!

Ответы [ 3 ]

0 голосов
/ 08 октября 2018
var body = "grant_type=password&username=username&password=password&client_id=clientid";

return this.http.post(`${this.oauth.URL}/oauth/token`, body, {
  headers: new HttpHeaders({
    Authorization: "Basic +token",
    "Content-type": "application/x-www-form-urlencoded;charset=utf-8"
  })
});
0 голосов
/ 23 мая 2019
Hi Ravindu ,

I think you are putting username and password in header and body as well.
it worked for me as below.

login(username, password) {

    const headers = {
            'Authorization': 'Basic ' + btoa('devglan-client:$2a$04$e/c1/RfsWuThaWFCrcCuJeoyvwCV0URN/6Pn9ZFlrtIWaU/vj/BfG'),
            'Content-type': 'application/x-www-form-urlencoded'
          }

    const body = new HttpParams()
      .set('username', username)
      .set('password', password)
      .set('grant_type', 'password');

      this.http.post('http://localhost:8080/' + 'oauth/token', body, {headers})
      .subscribe(data => this.setToken(data),
      err => alert('invalid Creadtilas'));

    }
0 голосов
/ 08 октября 2018
 let headers: HttpHeaders = new HttpHeaders();
  headers = headers.append('Content-Type', 'application/x-www-urlencoded');
  headers = headers.append('Authorization' : 'Basic ' + btoa('client-id' + ':' + 
  'secret');
  headers = headers.append('grant_type': 'password', 'username': 'administrator%40divinedragon.com', 'password': 'password');
...