Azure Функции, защищенные с помощью Azure AD - Получение HTTP 401 при вызове из собственного приложения - PullRequest
4 голосов
/ 29 мая 2020

Моя цель - защитить мои Azure функции с помощью Azure AD и вызывать их из приложения WPF.

У меня есть функция Azure со следующим определением:

public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
        HttpRequest req,
        ILogger log,
        ExecutionContext context,
        ClaimsPrincipal claimsPrincipal)

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

Azure AD App Registration Settings

Я настроил свое приложение в разделе «Открыть API "bladd Expose an API

Я также добавил разрешения API

API Permission

Я связал свое приложение в my Azure Functions App в колонке Authentication / Authorization.

Azure Functions Authorization Settings

Я получаю токен от Azure AD, как это, в приложении WPF (с использованием библиотеки Microsoft.Identity.Client)

            string applicationID = "***"; // My AppID Guid
            PublicClientApp = PublicClientApplicationBuilder.Create(applicationID)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .Build();

            var listScopes = new List<string>
            {
                //"user.read" - Removed based on @tony-yu recommendation
                $"api://{applicationID}/MyScope"
            };

            var authResult = await PublicClientApp.AcquireTokenInteractive(listScopes)
                                      .ExecuteAsync();

            var myToken = authResult.AccessToken;

Я могу пройти аутентификацию без каких-либо проблем, и я успешно получаю токен, но всякий раз, когда я вызываю свою функцию, я указываю свой токен в заголовке авторизации (Authorization = Bearer ****), я получаю:

401 - У вас нет разрешения на просмотр этого каталог или страницу.

Вот как я это называю (Почтальон):

enter image description here

Вот заголовок WWW-Authenticate содержимое при возврате вызова

www-authentication

Когда я проверяю полученный токен, он кажется le git

Token

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 07 июня 2020

Итак, я наконец заставил это работать благодаря этой статье SO здесь ambrose-leung

0 голосов
/ 29 мая 2020

Неправильный объем. Поскольку вы хотите получить доступ к своей функции, которая защищена рекламой, вам необходимо вместо этого использовать

var listScopes = new List<string>
            {
                "{applicationID}/.default"
            };

.

user.read - это разрешение для Microsoft Graph API.

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