Не удается получить токен доступа, отправив запрос POST в конечную точку /token из angular в Azure AD.
Как упоминалось в этой документации (https://docs.microsoft.com/en-us/graph/auth-v2-пользователь), после успешного авторизации я пытаюсь получить токен доступа из Azure AD с помощью Angular 6, но мой запрос, похоже, не достигает конечной точки Azure AD.
Если я выполняю запрос от почтальона с теми же параметрами, я получаю ответ.
Я не нахожу, что не так в моем запросе?
Заранее спасибо за вашу помощь !
getToken(tokenId: string) {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'login.microsoftonline.com'
})
};
const body = new HttpParams()
.set("client_id", "my_client_id")
.set("scope", "user.read offline_access")
.set("redirect_uri", "https://localhost:3000/")
.set("grant_type", "authorization_code")
.set("client_secret", "my_client_secret")
.set("code", tokenId);
this.http.post("https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/token", body.toString(), httpOptions).toPromise()
.then(res => {
// success
})
.catch(err => {
this.error = JSON.stringify(err);
});
}
Есть ошибка:
«Доступ к XMLHttpRequest в «https://login.microsoftonline.com/my_tenant-id/oauth2/v2.0/токен» из источника «https://локальный: 3000» заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin»
я пытался добавить «Access-Control-Allow-Origin»: «*» в заголовок, но это не работает...
Я нашел решение: Angular не может запросить «https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/токен» из-за ограничений CORS. Итак, я отправляю код авторизации в свой бэкэнд, бэкэнд делает запрос на получение токена доступа из Azure AD и возвращает токен и токен обновления в Angular.
ps: не забывайте параметр области «offline_access» при получении первого кода авторизации, чтобы быть уверенным, что позже получите «refresh_token» !!!