Как пройти аутентификацию в функции Azure с помощью функции аутентификации или субъекта-службы Azure AD

У меня есть функция Azure, которую я использую для получения данных из Azure AD, но я хочу ограничить круг лиц, которые могут использовать эту функцию, поскольку она будет использовать триггер HTTP, чтобы я мог позже вызывать функцию из приложения логики. по дороге. Так как функции Azure, запускаемые по протоколу HTTP, имеют общедоступную конечную точку, я хочу повысить безопасность, установив уровень авторизации на функцию или, что еще более предпочтительно, использовать субъект-службу Azure AD (предварительно созданный). После внесения этого изменения я могу позвонить, указав функцию в URL-адресе.

Базовый URL: https://something.com/api/function_name

URL с токеном: https://something.com/api/function_name?code=token_here

Однако моя функция ожидает ввода некоторого ввода. На анонимной конечной точке вы бы расширили базовый URL-адрес следующим образом: https://something.com/api/function_name/?parameter=value

Где параметр - это то, что ожидает код, и значение, передаваемое в переменную в коде. Теперь я новичок в этом материале конечных точек HTTP и передаче значений через URL-адрес. Я понимаю, что это передается как JSON (возможно)

Но я не понимаю, как я могу выполнять как авторизацию функции, так и передачу параметра. Я пробовал:

https://something.com/api/function_name/?parameter=value?code=token_here
https://something.com/api/function_name?code=token_here/?parameter=value

Кто-нибудь знает, как это должно работать?

С другой стороны, я мог бы также установить Platform Features -> Authentication / Authorization на принципала службы Azure AD. Но тогда как мне изменить URL-адрес для аутентификации с использованием client_id и client_secret этого субъекта-службы? На самом деле я бы предпочел использовать этот метод, потому что тогда я мог бы реализовать управление жизненным циклом для токена и повернуть его, чтобы сделать его еще более безопасным.

Я посмотрел здесь: Функция Azure с доступом аутентификации Azure AD с использованием JavaScript

И большинство других тем, которые я нашел на stackoverflow, даже не приблизились.

PS: Этот PS не требует ответа, но я был бы признателен за любую мысль. Эта вещь, которую я придумываю, представляет собой рабочий процесс, объединенный (запланированным) логическим приложением, которое запускает Get-Function. Если Get-Function каким-то образом потребуется вызвать Update-Function. И я делаю Get-Function HTTP-триггером, чтобы я мог также предложить его в качестве API, чтобы сделать эту функцию пригодной для автоматизации. (чтобы разрешить ротацию секретов с помощью вызовов API без тех людей, которым требуются разрешения Azure AD) Затем функции обновления потребуется ротация секретов для (определенных) приложений / субъектов-служб. Функция Azure основана на версии 2 и использует в качестве языка Powershell Core.


comment
Я нашел ответ на свое недоразумение с функцией auth: docs.microsoft.com/en-us/azure/azure-functions/ Это просто & параметр = значение & параметр = значение для каждого нового запроса, который необходимо передать в код. Остается только аутентификация участника рекламной службы Azure.   -  person Marco    schedule 21.08.2019
comment
Привет, Марко, поэтому вы хотите узнать, как использовать Azure AD для защиты своего функционального приложения с помощью функций платформы - ›Аутентификация / авторизация, правильно? Только запросы, прошедшие аутентификацию Azure ad, могут вызывать ваше приложение-функцию?   -  person Stanley Gong    schedule 21.08.2019
comment
привет Стэн, желательно да. Я уже знаю, как настроить эти параметры. Просто при вызове URL-адреса он, кажется, запрашивает мои учетные данные. Так что в основном просто интересно, как я должен использовать clientid & secret для аутентификации.   -  person Marco    schedule 21.08.2019


Ответы (1)


Если вы хотите использовать функции платформы - ›Аутентификация / авторизация (Easy Auth) для защиты вашей анонимной функции, запускаемой по http, вы можете выполнить следующие шаги:

  1. Включение аутентификации / авторизации (Easy Auth), используйте экспресс-режим Azure AD:

1

Нажмите "Сохранить". И как только процесс будет завершен, обратите внимание на client_id вашего приложения-функции, мы будем использовать его позже.

2

  1. Создание приложения Azure AD

3

4

Создайте для него секрет клиента, обратите внимание на значение секрета клиента и новый идентификатор приложения Azure AD:

5

6

  1. Сделайте запрос на получение токена доступа из Azure AD, чтобы мы могли вызвать вашу функцию, запускаемую http:
Request URL:
POST https://login.microsoftonline.com/<-your tenant id/name->/oauth2/token

Request Header:
Content-Type: application/x-www-form-urlencoded

Request Body:
grant_type=client_credentials
&resource=<-function App ID->
&client_id=<-new Azure AD App ID->
&client_secret=<-client secret of new Azure AD App ID->

Как показано ниже:

7

Как вы можете видеть в ответе, вы можете получить токен доступа, поэтому используйте этот токен в заголовке http-запроса Authorization param для вызова вашей HTTP-триггерной функции, которая включила простую аутентификацию, все запросы без правильного заголовка авторизации будут заблокированы:

8

Пожалуйста, отметьте меня, если это полезно для вас.

person Stanley Gong    schedule 22.08.2019
comment
Привет, Стэн, это хотя бы частично приведет меня туда. Я уже сделал шаги 1 и 2. 3 уводит меня немного дальше :) Этот URL-адрес запроса - это то, что я искал. Где ты это взял? Кроме того, как мне сделать этот запрос токена за пределами почтальона? Это все ручное тестирование, на которое я обязательно буду смотреть. так что спасибо за это! Не могли бы вы также знать, как я буду делать это программно? Я предполагаю, что это в основном какой-то формат для URL-адреса? Имейте в виду, что все это написано в PowerShell. может быть так ?: twilio .com / docs / usage / tutorials / - person Marco; 22.08.2019
comment
Привет, @Marco, это служба OAuth 2.0 для потока аутентификации вызовов службы Azure AD, это официальный документ об этом: docs.microsoft.com/en-us/azure/active-directory / develop /, если у вас есть какие-то неясности, пожалуйста, дайте мне знать :) - person Stanley Gong; 22.08.2019
comment
Спасибо! Вы меня опередили, полагаю, я смогу каким-то образом разобраться в части программного доступа. :) - person Marco; 22.08.2019
comment
Добро пожаловать ! Надеюсь у тебя хороший день ! - person Stanley Gong; 22.08.2019
comment
Это здорово, но в итоге я получаю 401. Мне непонятно, как клиент с токеном, полученным для приложения testAuth, может получить доступ к ресурсу, защищенному приложением stanfuntest001. Я не вижу никакой связи между этими двумя и считаю, что это причина ошибки 401. Вы что-то упускаете? Или я что-то упускаю? - person Szybki; 31.01.2020
comment
Это наиболее полный и точный ответ по теме! - person Gian Marco; 15.01.2021
comment
Что означает «имя» в URL-адресе запроса? название функции? название приложения AD? - person Román Aguilar; 24.02.2021