#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, в то время как у другого экземпляра той же службы все еще есть пустой токен …