Почему я не могу получить доступ к своей функции Azure, когда она требует аутентификации? - PullRequest
2 голосов
/ 22 мая 2019

(Я прошу прощения за длину этого вопроса; я хотел быть тщательным.)

Я новичок в Azure и пытаюсь настроить API без сервера, который требует аутентификации. У меня есть функция, которая работает правильно, когда аутентификация не включена (в основном просто "Hello, world" в Node.js). Однако, когда я включаю аутентификацию, я получаю только один ответ:

You do not have permission to view this directory or page.

Чтобы включить аутентификацию, я:

  1. Отправлено в Azure Active Directory на портале Azure.
  2. Отправился на регистрацию приложений.
  3. Создана новая регистрация для моего приложения Functions.
  4. Добавлен URI веб-перенаправления https://<myapp>.azurewebsites.net/.auth/login/microsoftaccount/callback.
  5. Создан новый клиентский секрет для моего приложения.
  6. Отправился в мое приложение с панели инструментов, выбрал вкладку «Функции платформы» и нажал «Аутентификация / Авторизация».
  7. Включена «Аутентификация службы приложений».
  8. Настроил провайдера аутентификации Microsoft с указанным выше идентификатором приложения и секретом клиента.
  9. Установите «Действие, которое необходимо выполнить, если запрос не прошел проверку подлинности», на «Вход в учетную запись Microsoft».

На данный момент я больше не могу получить доступ к своей конечной точке API без аутентификации (как и ожидалось). Затем я настроил Почтальон на получение токена:

  1. Выбор вкладки Авторизация.
  2. Установка типа на «OAuth 2.0».
  3. Нажмите «Получить новый токен доступа».
  4. Установка следующих значений:
    • Тип гранта: Код авторизации
    • URL обратного вызова: https://<myapp>.azurewebsites.net/.auth/login/microsoftaccount/callback (так же, как я ввел в мою регистрацию приложения выше).
    • URL авторизации: https://login.microsoftonline.com/<Directory (tentant) ID>/oauth2/authorize?resource=<Application (client) ID>
    • URL токена доступа: https://login.microsoftonline.com/<Directory (tentant) ID>/oauth2/token?resource=<Application (client) ID>
    • Идентификатор клиента: <идентификатор приложения (клиента)>
    • Секрет клиента: <Секрет клиента>
    • Область применения:
    • Состояние:
    • Аутентификация клиента: отправка в виде обычного заголовка аутентификации
  5. Нажатие кнопки «Запросить токен».
  6. Войдите в систему как я в появившемся окне. (Это случилось только в первый раз; предположительно, мои учетные данные где-то кешируются.)
  7. Нажатие кнопки «Использовать токен».
  8. Нажатие кнопки «Предварительный просмотр».

Когда я нажимаю «Отправить», я получаю сообщение об ошибке выше. Если я отключаю аутентификацию или изменяю «Действие для принятия…», чтобы разрешить неавторизованные запросы, он снова начинает работать (но, конечно, не требует аутентификации). Я запустил JWT, который Почтальон получает через JWT.io , а полезная нагрузка выглядит разумной, насколько я могу судить:

{
  "aud": "<Application (client) ID>",
  "iss": "https://login.microsoftonline.com/<Directory (tentant) ID>/v2.0",
  "iat": 1558488698,
  "nbf": 1558488698,
  "exp": 1558492598,
  "aio": "<base64? data>",
  "azp": "<Application (client) ID>",
  "azpacr": "1",
  "idp": "live.com",
  "name": "Ben Blank",
  "oid": "<a GUID I don't recognize>",
  "preferred_username": "ben.blank@gmail.com",
  "scp": "User.Read",
  "sub": "<base64? data>",
  "tid": "<Directory (tentant) ID>",
  "uti": "<base64? data>",
  "ver": "2.0"
}

Может кто-нибудь сказать мне, что я сделал не так?

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы используете учетную запись Microsoft в качестве поставщика аутентификации.Способ получения токена доступа относится к Azure Active Directory, а не к учетной записи Microsoft .

При доступе к вашей функции url https://tonytest4.azurewebsites.net/api/HttpTrigger1?name=test, вы будете перенаправлены на страницу входа.Вы найдете URL-адрес https://login.live.com/oauth20_authorize.srf?.После ввода правильных учетных данных вы сможете получить доступ к своей функции.

enter image description here

1 голос
/ 23 мая 2019

Вам необходимо зарегистрировать Postman как клиентское приложение в AAD и дать ему разрешение на вызов вашего API, например, здесь , за исключением того, что вы дадите ему разрешения на доступ к вашему API, а не к AAD Graph, как в ссылка на сайт. Ваш почтальон должен быть настроен на использование идентификатора клиента приложения и секрета для получения токена. Прямо сейчас вы используете Postman, чтобы попросить ваше приложение API получить токен доступа к себе. Скорее всего, ваше приложение не настроено в AAD для вызова себя! (все равно не имеет смысла).

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