Как настроить согласие для приложения Azure (ошибка AADSTS65005)
У нас есть приложение-ресурс Azure, API-интерфейсы которого мы хотим предоставить для доступа клиентскому приложению в Azure. Эти два приложения находятся на разных арендаторах. Пользователи, имеющие доступ к API (владельцы учетных записей Office 365), находятся на разных арендаторах.
Вся настройка работает, когда мы вручную предоставляем субъекту службы для клиента, который пытается аутентифицироваться из клиентского приложения в приложении ресурса. Я имею в виду, что они могут войти в систему, используя свою учетную запись Office 365, и им показывается экран согласия.
Если мы не предоставляем субъекта службы для пользователя AAD пользователя, пытающегося пройти проверку подлинности, мы получаем эту ошибку:
AADSTS65005 - The app needs access to a service <service> that your
organization org.onmicrosoft.com has not subscribed to or enabled. Contact
your IT Admin to review the configuration of your service subscriptions.
Мы не можем предоставить субъект-службу для каждого арендатора, который обращается к нашему приложению (приложению-ресурсу). Есть что-то, чего нам не хватает? Используем ли мы правильный поток?
1 ответ
Вы можете найти помощь для вашего сценария здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview (Прокрутите вниз до нескольких уровней в нескольких арендаторах)
В случае API, созданного организацией, отличной от Microsoft, разработчик API должен предоставить своим клиентам способ дать согласие на использование приложения клиентам своих клиентов.
Рекомендованный дизайн предназначен для стороннего разработчика для создания API, так что он также может функционировать как веб-клиент для реализации регистрации:
Следуйте предыдущим разделам, чтобы убедиться, что API реализует требования регистрации / кода мультитенантного приложения.
В дополнение к раскрытию областей / ролей API убедитесь, что регистрация включает разрешение Azure AD "Вход и чтение профиля пользователя" (предоставляется по умолчанию).
Реализовать страницу входа / регистрации в веб-клиенте, следуя инструкциям администратора, которые обсуждались ранее.
Как только пользователь дает согласие на приложение, в его клиенте создаются ссылки участника службы и делегирования согласия, а собственное приложение может получать токены для API.
По сути, все части, которые нужны вашему приложению, должны быть представлены в качестве принципалов обслуживания в клиенте клиента. Это требование AAD.
Единственный способ добиться этого - дать администратору согласие на API и приложение по отдельности, поскольку они зарегистрированы у разных арендаторов.
Если они были зарегистрированы в одном и том же клиенте, вы можете использовать свойство knownClientApplications в манифесте, чтобы разрешить согласиться обоим одновременно.
В моем случае я раскрываю свой собственный API и пытаюсь получить доступ к этому API из другого моего приложения (режим учетных данных клиента), я удалил разрешение по умолчанию для обоих приложений (использующего приложение и приложение api) - "Azure Active Directory Graph-> Пользователь. Прочтите "так как я думал, что мне это не нужно, но это вызвало эту проблему" Приложению требуется доступ к службе.... на которую ваша организация не подписана или не включена. Обратитесь к своему ИТ-администратору, чтобы проверить конфигурацию ваш сервис + подписки.
Я получил подсказку из ответа @juunas - пункт 2. Спасибо, Juunas