Заголовок авторизации пуст

#angular #typescript

Вопрос:

Я использую MSAL для получения токена аутентификации и пытаюсь передать его другой функции для вызова API azure, всякий раз, когда я пытаюсь использовать токен во второй функции, я получаю 401 с ошибкой «AuthenticationFailedMissingToken».

Вот код:

 export class integrationAccountService
{
  authToken: string;

  constructor( private authService: MsalService, private httpclient: HttpClient, private api: ApiService) {
    this.authToken = "";
  }

  gettoken() {
    this.authService.acquireTokenSilent(tokenRequest).then(tokenResponse => {
      this.authToken = tokenResponse.accessToken;
      //console.log(this.authToken);
    }).catch(function (error) {
      console.log(error);
    });
  }

  getcertificates(): Observable<Certificate> {
    const httpOptions : Object = {
      headers: new HttpHeaders({
        'Authorization': 'Bearer '   this.authToken,
      }),
      responseType: 'json'
    };
    return this.httpclient.get<Certificate>(environment.api.getAllCertificatesUrl, httpOptions);
  }
}
 

Я думал, что это.authToken будет доступен в другой функции того же класса, любые разъяснения будут полезны

Комментарии:

1. Как правило, так и есть. Но вы выполняете (и ждете результата) gettoken перед вызовом getCertificates . Кроме того, «Заголовок авторизации отсутствует» не является результатом ошибки по умолчанию. Вы уверены, что ваш API ожидает этот заголовок именно в таком виде. Вы пробовали проверять свои сетевые запросы в инструментах разработчика браузера, если запрос содержит Authorization заголовок с правильным значением?

2. Спасибо за вклад @derpirscher. Для уточнения запроса повторяется 401 с кодом «АутентификацияFailedMissingToken». Запрос работает, если я жестко закодирую токен в заголовке авторизации, но когда я использую это. токен аутентификации заголовок «На предъявителя»

3. Снова вопрос: вы выполнили gettoken и успешно ли он вернулся до того, как вы позвонили getCertificate ?

4. В этом случае ошибка не содержится в разнесенном коде. Потому что, если gettoken this.authToken getcertificates будет вызван успешно заданный ранее, у вас, getcertificates конечно, будет доступ this.authToken . Таким образом, либо есть проблема со временем, либо что-то другое сбрасывает authToken свойство

5. И я не особенно знаком с angular, но я полагаю, что среда выполнения заботится о том, чтобы не было нескольких экземпляров одной и той же службы? Потому что, если бы это было так, у одного экземпляра мог бы быть совершенно действительный authToken, в то время как у другого экземпляра той же службы все еще есть пустой токен …