Проверка подлинности функции Azure с использованием Azure Active Directory - PullRequest
0 голосов
/ 27 ноября 2018

Я хотел включить аутентификацию в функциях Azure.Итак, я решил использовать EasyAuth (ссылка Аутентификация / Авторизация в разделе функций платформы) и успешно смог настроить процесс аутентификации.

Проверка подлинности работает, когда я вручную выполняю вход в конечную точку функции Azure.Но когда я пытаюсь получить программный доступ к API, без какого-либо ручного вмешательства пользователя, я сталкиваюсь с проблемой аутентификации:

Status Code:401, Unauthorized

Я получаю токен доступа из AAD, используя clientID и clientSecret, используя следующий код:

AuthenticationContext context = new AuthenticationContext("https://login.windows.net/<tenant-id>");
        string key = "<client-secret>";
        ClientCredential cc = new ClientCredential("<client-id>", key);
        AuthenticationResult result = context.AcquireTokenAsync("https://<AzureFunctionAppName>.azurewebsites.net/", cc).Result;
        return result.AccessToken;

Затем я пытаюсь отправить полученный в заголовке токен доступа для нового запроса в мой API:

 var content = "{\"on\":true, \"sat\":254, \"bri\":254, \"hue\":10000}";
        var AADToken = GetS2SAccessToken();
        HttpClient Client = new HttpClient();
        Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AADToken);
        var foo = Client.PostAsync("https://<AzureFunctionAppName>.azurewebsites.net/.auth/login/aad", new StringContent(content.ToString())).Result;
        Console.WriteLine($"result: {foo}");

Но приведенный выше код приводит к несанкционированным вызовам.Я не уверен, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Мы могли бы использовать accesstoken для прямого доступа к функции api you azure, если уровень аутентификации вашей функции azure равен анонимный или функциональная клавиша также требуется.

Я получаю токен доступа с указанным вами способом.В соответствии с порталом ресурсов Azure (https://resources.azure.com/), допустимые значения по умолчанию:

  "https://{functionAppName}.azurewebsites.net/.auth/login/aad/callback"

Поэтому я добавляю https://{functionAppName}.azurewebsites.net/ в качестве разрешенных атрибутов

enter image description here

Тогда я могу использовать токен доступа напрямую. Я проверяю его с почтальоном.

enter image description here

Мы также можем использовать следующий способполучить простой токен авторизации. токен доступа - это полученный вами токен.

Post https://xxx.azurewebsites.net/.auth/login/aad
Content-Type:application/json
{
    "access_token":"eyJ0eXAiOix...rtf2H7lyUL-g34HVw"
}

enter image description here

После этого мы можемиспользуйте токен get для доступа к функции Azure api

enter image description here

Примечание : заголовок x-zumo-auth : токен

0 голосов
/ 28 ноября 2018

Что касается проблемы, вам нужно создать клиентское приложение для вызова вашей функции Azure.Ниже приведены подробные шаги.

  1. Настройка Azure AD для функции Azure.Пожалуйста, обратитесь к https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#auth.

    я.Перейдите к Интеграции вашего триггера, установите уровень авторизации на Anonymous enter image description here

    ii.Перейдите к Аутентификации / Авторизации и настройте Azure AD

    enter image description here

  2. Зарегистрируйте скрытое приложение в AD на портале Azure.Для получения более подробной информации, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v1-integrate-apps-with-azure-ad.

    a.Откройте Azure Active Directory и нажмите «Регистрация приложений», выберите «Регистрация нового приложения».

    b.Введите свое имя и URL переадресации, вы можете написать что угодно.Затем нажмите кнопку «Создать».

    c.Настройки-> Необходимые разрешения -> добавить, выберите приложение, которое вы используете в шаге 1

    d.Выберите разрешение -> РАЗРЕШЕНИЯ НА ПРИМЕНЕНИЕ -> Выбрать-> Готово-> Предоставить разрешения-> Да

    e.Создайте ключ и скопируйте его

    f.Скопируйте идентификатор приложения

  3. Test

Получить токен:

METHOD: POST

Url : https://login.microsoftonline.com/your directory ID/oauth2/token 

HEADERS:  Content-Type : application/x-www-form-urlencoded

BODY:
grant_type+=client_credentials&resource+=”your Function APP ID”&client_id+++++=”the application that your register  id”&client_secret+=”the key you create”

Функция тестирования:

METHOD: Get

Url : https://<Functionname>.azurewebsites.net/api/HttpTriggerCSharp1?name=azure

HEADERS:  Authorization : Bearer <access token>

enter image description here enter image description here enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...