Одним із найбільш актуальних питань для розробників програмного забезпечення є інтеграція з системами, що використовують аутентифікацію з двома факторами, зокрема, SharePoint Online. У даній статті розглянуто процес інтеграції аутентифікації SharePoint Online з додатком WinForms за допомогою механізму Multi Factor Authentication (MFA).
SharePoint Online є одним із найпопулярніших засобів для спільної роботи та зберігання даних у хмарі. Ця платформа забезпечує розширені можливості управління документами, спільним доступом до файлів та іншими корисними функціями для організацій будь-якого масштабу. Однак, з огляду на збільшену увагу до кібербезпеки, багато організацій використовують аутентифікацію з двома факторами для забезпечення додаткового рівня захисту.
Додаток WinForms, створений з використанням мови програмування C#, є одним із популярних інструментів для розробки Windows-додатків. Інтеграція цього додатку з SharePoint Online може бути корисною для автоматизації рутинних завдань, обміну даними та іншого функціоналу, який сприяє підвищенню продуктивності роботи з документами та інформацією, збереженою у хмарі.
Однак, інтеграція аутентифікації SharePoint Online з WinForms App, яка використовує Multi Factor Authentication, може бути складною задачею через особливості взаємодії з системою аутентифікації. Для успішної реалізації цієї задачі необхідно ретельно вивчити процес отримання токену доступу та взаємодію з API SharePoint Online.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using System.Security.Principal; using System.Security; using System.Diagnostics; using PnP.Framework; using Microsoft.SharePoint.Client; using Microsoft.Graph; using System.Globalization; using Microsoft.Identity.Client; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Formats.Asn1.AsnWriter; using System.Windows.Interop; using Microsoft.AspNetCore.Components; using Microsoft.IdentityModel.Abstractions; namespace AuthDemoWinForms { public partial class MainForm : System.Windows.Forms.Form { private static readonly string[] scopesArray = ["User.Read", "Contacts.Read"]; private static readonly string Password = "ThisIsMyPassword"; private static readonly string AuthEndPoint = "https://login.microsoftonline.com/common/oauth2/token"; private static readonly string ClientId = "00000003-0000-0ff1-ce00-000000000000"; private static IPublicClientApplication? SharePointApplication = null; private static readonly string WebFullUrl = "https://domainname.sharepoint.com/teams/DEFILES/Shared%20Documents/Forms/AllItems.aspx"; public MainForm() { InitializeComponent(); SharePointApplication = PublicClientApplicationBuilder.Create(ClientId) .WithDefaultRedirectUri() .WithLogging(new IdentityLogger(EventLogLevel.Warning), enablePiiLogging: false) .Build(); } private void LoginButton_Click(object sender, EventArgs e) { if (SharePointApplication != null) { Task<AuthenticationResult?> authenticationResultTask = GetTokenInteractively(SharePointApplication); authenticationResultTask.Wait(); AuthenticationResult? authenticationResult = authenticationResultTask.Result; OutputTextBox.Text = authenticationResult == null ? string.Empty : authenticationResult.Account.Username; } } private static async Task<AuthenticationResult?> GetTokenInteractively(IPublicClientApplication? publicClientApplication) { try { return await publicClientApplication!.AcquireTokenInteractive(scopesArray) .WithParentActivityOrWindow(new WindowInteropHelper(System.Windows.Application.Current.MainWindow)) .ExecuteAsync(); } catch (Exception ex) { Debug.WriteLine($"InnerException : {ex.InnerException}\nMessage : {ex.Message}\nStackTrace : {ex.StackTrace}"); return null; } } private static async Task<AuthenticationResult?> Login() { try { } catch (Exception ex) { } return null; } } } |
Під час інтеграції аутентифікації SharePoint Online з WinForms App, основним питанням є отримання токену доступу для взаємодії з ресурсами SharePoint. У вихідному коді наведено приклад реалізації отримання токену за допомогою бібліотеки Microsoft.Identity.Client.
Зверніть увагу на метод GetTokenInteractively, який викликається при натисканні кнопки авторизації. У цьому методі відбувається взаємодія з Microsoft Identity Platform API для отримання токену доступу. Після успішної аутентифікації користувача та отримання токену доступу можна виконувати різні операції з ресурсами SharePoint Online.
Однак, варто зазначити, що в процесі інтеграції можуть виникати проблеми, зокрема, з асинхронними запитами та відображенням вікон аутентифікації. Для вирішення таких проблем важливо докладно дослідити документацію та використовувати налагоджувальні засоби, які надаються розробникам платформи SharePoint та Microsoft Identity Platform.
У підсумку, інтеграція аутентифікації SharePoint Online з WinForms App є складною, але можливою задачею, яка вимагає ретельного вивчення та використання правильних інструментів. Правильно реалізована аутентифікація дозволить забезпечити безпеку та ефективність роботи з даними у хмарі за допомогою додатків WinForms.