Включение CORS в Azure Active Directory

Я пытаюсь получить токен доступа из Azure Active Directory программно, используя следующий метод в приложении Angular 6.

    let body1 = new FormData()
    body1.append("resource", environment.config.clientId)
    body1.append("grant_type", "client_credentials")
    body1.append("client_id", environment.config.clientId)
    body1.append("client_secret", "*****")

    return this._http.post("https://login.microsoftonline.com/" + environment.config.tenant + "/oauth2/token", body1)

Мне удалось получить токен доступа через этот URL-адрес в Postman, но я заблокирован CORS при вызове его через мое приложение. Ошибка ниже.

    Failed to load https://login.microsoftonline.com/*****/oauth2/token: 
Response to preflight request doesn't pass access control check: No 'Access-
Control-Allow-Origin' header is present on the requested resource. Origin 
'http://localhost:4200' is therefore not allowed access.

Итак, как мне включить CORS в Azure Active Directory для всех доменов?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
9 758
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто вы этого не сделаете.

Вы раскрываете секрет клиента своего приложения публике. Помните, что запрос будет сделан из устройство пользователя. Чтобы они могли наблюдать за ним и запечатлеть ваш секрет. Вот почему конечная точка токена не поддерживает CORS и, вероятно, никогда не будет.

ОБНОВЛЕНИЕ: конечная точка токена теперь поддерживает CORS, если вы настроили URL-адрес ответа с платформой SPA. Это позволяет использовать поток кода авторизации с PKCE. MSAL.js 2.0 поддерживает этот поток. Обратите внимание, что это все еще не связано с секретом клиента.

Способ получения токенов из интерфейсного JS-приложения - использовать неявный поток предоставления или поток кода авторизации с PKCE. Или, если вам нужен токен только для приложения, вы должны выполнить запрос, который вы пробовали, из внутреннего приложения.

Неявный поток предоставления позволяет получать токены непосредственно из конечной точки авторизации при входе пользователя в систему. Вы можете использовать ADAL.JS / MSAL.JS, чтобы помочь в этом. У вас не может быть токенов без идентификатора пользователя, поскольку ваше собственное приложение не может подтвердить его личность.

+1 К этому ответу. CORS блокирует вас, потому что вы пытаетесь сделать что-то в браузере, что вы должны сделать в браузере никогда.

Philippe Signoret 16.10.2018 18:51

Спасибо @juunas за информацию. Я использую адал в своем приложении для входа пользователя, но есть часть приложения, в которой я хочу, чтобы пользователь мог видеть некоторые конкретные личные данные без необходимости входа в систему (я не могу сделать данные, которые я пытаюсь получить общедоступный). Это приложение не будет разворачиваться и, по сути, является доказательством правильности концепции, поэтому я ищу способ решения этой проблемы. Вы знаете, как программно войти в систему, чтобы пользователю не приходилось этого делать? С адалем или нет?

kg123 16.10.2018 19:45

Вам понадобится серверная часть для вашего приложения, которая получает данные и возвращает их для интерфейса.

juunas 16.10.2018 19:48

Хммм ... Что делать, если мы хотим использовать поток PKCE в браузере? Разве неявный поток не был удален из рекомендуемых передовых практик?

Tim Reilly 23.01.2019 18:05

Я не думаю, что PKCE пока поддерживается в Azure AD для этого сценария. Так что скрытый путь - это время.

juunas 24.01.2019 08:14

Или используйте файлы cookie для внешнего интерфейса и выполните аутентификацию на сервере

juunas 24.01.2019 08:24

«Конечная точка токена теперь поддерживает CORS», как именно это включить?

jbooker 19.11.2020 21:29

Вам необходимо добавить платформу «SPA» к вашей регистрации приложения и добавить к ней URL-адреса ответов.

juunas 19.11.2020 21:31

Добавление «SPA» почти сработало, так как теперь запрос опций предварительной проверки теперь возвращает ОК. Однако, несмотря на то, что в ответе предварительной проверки есть Access-Control-Allow-Origin: *, браузер все еще имеет ошибку в консоли из источника. 'локальный: 44386' был заблокирован политикой CORS: заголовок 'Access-Control-Allow-Origin' отсутствует на запрошенном ресурсе. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса на 'no-cors', чтобы получить ресурс с отключенным CORS.

jbooker 19.11.2020 21:41

Вы используете новую версию MSAL.js? npmjs.com/package/@azure/msal-browser

juunas 19.11.2020 21:45

Другие вопросы по теме