Как пройти через семейство сайтов SharePoint с включенной многофакторной аутентификацией (MFA)? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть приложение Winforms, которое отображает семейство сайтов SharePoint и библиотеки документов в элементе управления TreeView с иерархией в соответствии с уровнем сайта.

Я использую следующий код для учетной записи с включенным MFA

            AuthenticationManager authManager = new AuthenticationManager();            
            using (ClientContext clientContext = authManager.GetWebLoginClientContext(siteUrl))
            {
                Web web = clientContext.Web;
                WebCollection site = web.GetSubwebsForCurrentUser(null);
                clientContext.Load(site, we => we.Include(w => w.Url, w => w.Title));
                clientContext.ExecuteQuery();
                teamSites = site.ToDictionary(w => w.Url, w => w.Title);
                teamSites = teamSites.OrderBy(kvp => kvp.Value).ToDictionary(k => k.Key, k => k.Value);
                ListCollection libraries = web.Lists;
                clientContext.Load(libraries, l => l.Include(li => li.DefaultViewUrl, li => li.BaseType, li => li.Title, li => li.BaseTemplate, li => li.Hidden));
                clientContext.ExecuteQuery();
                documentLibraries = libraries.Where(lib => lib.BaseType == BaseType.DocumentLibrary && lib.Hidden == false && lib.BaseTemplate == 101).ToList();
            }

URL сайта группы будет добавлен к каждому TreeNode в моем TreeView, когда пользователь нажимает на TreeNode, ему нужно будет загружать подсайты и библиотеки документов, используя вышеуказанный метод. Тем не менее, каждый раз, когда он загружается, всплывающее окно отображается и исчезает, потому что пользователь уже вошел в систему. Есть ли способ предотвратить его появление каждый раз, когда пользователь нажимает на сайт TreeNode?

1 Ответ

0 голосов
/ 17 марта 2020

Вы можете использовать аутентификацию приложения.

демо-поток

//Get the realm for the URL
                string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);

                //Get the access token for the URL.  
                //   Requires this app to be registered with the tenant
                string accessToken = TokenHelper.GetAppOnlyAccessToken(
                    TokenHelper.SharePointPrincipal,
                    siteUri.Authority, realm).AccessToken;

                //Get client context with access token
                using (var clientContext =
                    TokenHelper.GetClientContextWithAccessToken(
                        siteUri.ToString(), accessToken))
                {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...