#angular #azure #http #azure-active-directory
#угловатый #azure #http #azure-активный каталог
Вопрос:
Я пытаюсь получить токен конечной точки ресурса управления Azure от angular, но я знаю, что это невозможно сделать на стороне clinet. По какой-то веской причине я все равно пытаюсь это сделать.
Поскольку я могу получить access_token, выполнив эту команду.
curl -X GET -H 'Content-Type: application/x-www-form-urlencoded'
-d 'grant_type=client_credentialsamp;client_id=<client-id>amp;resource=<management-resource-endpoint>amp;client_secret=<application-secret>'
https://login.microsoftonline.com/<tenantid>/oauth2/token
Я пытаюсь преобразовать эту команду в http get-запрос, подобный этому…
getAADToken() {
const param = new HttpParams();
param.append('grant_type', 'client_credentials');
param.append('client_id', <client-id>);
param.append('resource', '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d');
param.append('client_secret', <application-secret>);
return this.http.get<any>("https://login.microsoftonline.com/<tenantid>/oauth2/token", {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
params:param
});
}
Ответ №1:
Вы не можете этого сделать, поскольку Azure AD не позволяет использовать поток учетных данных клиента из браузера. Они должны были бы разрешить запрос с перекрестным отправлением, который вы не можете настроить.
Существует много причин безопасности, по которым вы не можете этого сделать, наиболее очевидной из которых, о которой вы упомянули, является то, что секрет клиента виден любому, кто посещает страницу. Кроме того, любой, кто может получить файлы этой страницы, может работать с API как с приложением, поэтому отследить, кто на самом деле что-то сделал, становится довольно сложно.
Обычно, когда вам нужно что-то сделать как приложение, потому что пользователь не может этого сделать, у вас есть пользователь, проходящий аутентификацию во внешнем интерфейсе, вызывающий от его имени внутренний API, API авторизует пользователя, а затем выполняет аутентифицированный только для приложения вызов целевого API.