2

У меня есть веб-приложение Office365 с mutlitenant, которое проверяет подлинность пользователей с потоком кода авторизации (мой сервер выполняет запросы к API), защищенным Azure AD на OAUTH/OpenIdConnect.Azure AD - Office365APIs. Проверьте, не является ли подключенный пользователь глобальным администратором без облачных зон администрирования

Мы используем Microsoft.Owin.Security.OpenIdConnect, Version=3.0.0.0 и Azure Active Directory ADAL.NET с Microsoft.IdentityModel.Clients.ActiveDirectory, Version=2.19.0.0 после this sample.

В манифесте приложения Azure AD я использую только области без разрешения администратора.

Тем не менее, я хотел бы знать, является ли подключаемый пользователем пользователем Admin 365 Global Admin арендатора.

Я проверил принятые answer here. Это в основном читает ответ на <graphurl>/me/memberOf Однако в моей ситуации это неприемлемо. Следуя this reference, все необходимые области являются областями «согласия администратора».

Я пробовал разные подходы: используя System.Web.Security.Roles.GetRolesForUser(), глядя в ClaimsPrincipal.Current и, наконец, тщательно изучив разобранную JWT, чтобы узнать, есть ли информация о ролях Office365 подключенного пользователя. Все без успеха.

Можете ли вы предоставить информацию о текущих полномочиях администрирования пользователей в офисах Office 365 с заявлением, объявленным без областей согласия администратора?

Примечание: Этот вопрос более или менее связан с this one, но требования менее прочные: мы хотим узнать, является ли текущий пользователь Глобальным администратором.

ответ

1

Можете ли вы предоставить информацию о текущих полномочиях администрирования пользователей в офисах Office 365 с заявлением, объявленным без областей согласия администратора?

Для приложений с несколькими арендаторами доступ к данным каталога требует согласия администратора.

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

Добавить согласие параметр URL "незамедлительным = admin_consent":

public ActionResult AdminConsentApp() 
    { 
     string strResource = Request.QueryString["resource"]; 
     string strRedirectController = Request.QueryString["redirect"]; 

     string authorizationRequest = String.Format(
      "https://login.windows.net/common/oauth2/authorize?response_type=code&client_id={0}&resource={1}&redirect_uri={2}&prompt={3}", 
       Uri.EscapeDataString(SettingsHelper.ClientId), 
       Uri.EscapeDataString(strResource), 
       Uri.EscapeDataString(String.Format("{0}/{1}", this.Request.Url.GetLeftPart(UriPartial.Authority).ToString(), strRedirectController)), 
       Uri.EscapeDataString("admin_consent") 
       ); 

     return new RedirectResult(authorizationRequest); 
    } 

Для получения более подробной информации, вы можете ссылаться на пример проекта O365-WebApp-MultiTenant.

+2

Я знал, что для доступа к ролям в арендаторе нам нужно согласие с администратором, но я надеялся, что «проверка, могу ли я быть администратором», возможно. Предоставление admin_consent для нас невозможно, приложение также служит в Office Addin (из магазина). У нас есть подход «снизу вверх», где базовые пользователи могут использовать и попробовать приложение без согласия администратора. Мы могли бы предоставить admin_consent, но только для дополнительных функций, поэтому мы ожидаем динамического согласия http://stackoverflow.com/questions/36720452/alternative-to-groups-readbasic-all-access-groups-without-admin-consent/ 36731679 # 36731679 –