Можно ли настроить единое «собственное приложение», которое могут использовать пользователи в разных учетных записях / каталогах Azure, чтобы они могли получать данные из своих Office 365 Sharepoint Online?
Мы можем заставить это работать с помощью «веб-приложения», потому что на портале Azure, где вы это настроили, есть параметр «Многопользовательский», для которого можно задать значение «Да» - примечания для этого поддерживают следующее:
Определяет, могут ли пользователи во внешних организациях предоставлять вашему приложению доступ к данным в каталоге своей организации. Этот элемент управления влияет только на возможность предоставления доступа. Это не влияет на уже предоставленный доступ.
И некоторые ранние тесты показывают, что это действительно работает. Однако это подразумевает использование секрета Oauth, который должен быть встроен в приложение и примечания здесь:
Состояние (относительно секрета приложения):
.... Его не следует использовать в собственном приложении, потому что client_secrets нельзя надежно хранить на устройствах. Это требуется для веб-приложений и веб-API, которые могут безопасно хранить client_secret на стороне сервера.
Для нативных приложений документы здесь:
Состояние:
Регистрации собственных клиентов по умолчанию являются мультитенантными. Вам не нужно предпринимать никаких действий, чтобы сделать регистрацию нативного клиентского приложения мультитенантной.
Это говорит о том, что они должны работать так, как мы желаем - однако, когда мы тестируем это с потоком OAuth из учетной записи не в том же Azure AD, где было настроено собственное приложение, после аутентификации мы получаем следующее:
AADSTS70001: приложение с идентификатором "XXXXXXXXXXXXXXXXXXXXXXX" не было найдено в каталоге YYYYYYYYYYYYYYYYYYY
Похоже, это не работает. В настоящее время, похоже, единственный способ выполнить эту работу - это создать веб-приложение и встроить идентификатор клиента и секрет в собственное приложение.
У кого-нибудь были успехи с мультитенантными нативными приложениями или какие-либо идеи / отзывы о том, что я делаю неправильно или могу попробовать?
ОБНОВЛЕНИЕ. Я понял, что здесь есть две ошибки: * На самом деле вы можете нажать кнопку «Манифест» в Azure и отредактировать необработанный JSON, обновив значение «availableToOtherTenants», чтобы сделать его мультитенантным. * У меня не было scope = user_impersonation в потоке OAuth.
Теперь кажется, что мы можем создать собственное приложение, с помощью которого пользователи в других организациях / арендаторах могут аутентифицироваться.
ОБНОВЛЕНИЕ 2. Итак, оказалось, что наше приложение теперь работает для некоторых пользователей, но по крайней мере один из них получает:
AADSTS65005: недопустимый ресурс. Клиент запросил доступ к ресурсу, который не указан в запрошенных разрешениях при регистрации клиентского приложения. Идентификатор клиентского приложения: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA. Значение ресурса из запроса: https://XXX.YYYYYY.com. Идентификатор приложения-ресурса: ZZZZZZZZZZZ. Список допустимых ресурсов из регистрации приложения: 00000002-0000-0000-c000-000000000000, 00000003-0000-0ff1-ce00-000000000000. \ R \ nИдентификатор трассы: KKKKKKKKKKKKKKKKKK \ r \ nИдентификатор корреляции: SCPCCCCCCCCCCCCC
Я не понимаю, почему это будет работать для одного пользователя, но не для другого, если оба находятся в разных клиентах / Azure AD, где создано приложение.