Многие корпоративные организации делают шаг навстречу облачным технологиям и разрабатывают мобильные приложения для внутреннего использования. Сегодня появляется все больше предприятий, где действует целый ряд внутренних приложений, помогающих повысить производительность работников, вести отчетность по расходам и учёт рабочего времени, отпусков и отгулов, и, кроме того, даже контролировать совместное использование автомобилей. Вместо того чтобы создавать новую инфраструктуру для этих приложений, организации могут воспользоваться преимуществами Active Directory (AD) и использовать существующие интерфейсы API, которые позволяют управлять такими данными, как контакты, электронная почта, календарь, деревья организационных структур и многое другое. Благодаря новым и усовершенствованным библиотекам проверки подлинности пользователей, а также за счет использования Microsoft Graph создавать такие приложения теперь стало намного проще.
В этой статье мы создадим примерное приложение для управления отпуском (время пребывания на больничном, отпуск по уходу за ребёнком и т. д.), и мы сделаем это с помощью библиотеки проверки подлинности Microsoft (MSAL) и API Microsoft Graph.
Шаг 1: Регистрация приложения
Можно зарегистрировать приложение, посетив сайт https://apps.dev.microsoft.com и нажав кнопку «добавить приложение» — Add an app. После ввода сведений о приложении убедитесь, что создан код приложения — Application Id. В разделе «Добавление платформы» — Add Platforms можно зарегистрировать приложение на нескольких платформах. Это удобнее, когда используется одинаковый идентификатор для различных реализаций одного и того же приложения как в мобильной версии, так и веб.
Щелкните на кнопку Native Application. Это позволит мобильным приложениям получить доступ к AD организации и API-интерфейсу Graph.
После добавления поддерживаемых платформ мы можем добавить разрешения на том же экране. В этом случае я дал следующие разрешения: «User.Read», «User.ReadBasic.All» и «Mail.Send». Они необходимы для получения сведений о пользователе и отправки электронной почты его руководителю, чтобы дать ему знать, что пользователь не явится на работу в этот день.
Сохраните изменения, и Ваше приложение теперь зарегистрировано с помощью организационной Active Directory!
Шаг 2: Создание мобильных приложений
Создайте пустое приложение Xamarin.Forms с помощью Portable Class Library (PCL) для совместного использования кода на различных платформах. В случае с этой библиотекой убедитесь, что для профиля задано значение Profile7. Добавьте во все проекты пакеты NuGet Microsoft.Client.Identity и Microsoft.Graph. Если Вы не видите их в диспетчере пакетов NuGet, установите флажок на «Показывать предварительные релизы» — Include Prerelease.
Теперь в первую очередь необходимо проверить подлинность пользователя. Это делается с помощью класса PublicClientApplication библиотеки проверки подлинности Microsoft (MSAL). Внутри App.xaml.cs добавьте следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static PublicClientApplication IdentityClientApp = null; public static UIParent UiParent = null; // AD application identifier and requested permissions, or scopes. public static string ClientID = "7214e6cd-85ad-4433-9d13-f2631e1d4142"; // TODO: Replace this with the Application ID from Step #1. public static string[] Scopes = { "User.Read", "User.ReadBasic.All ", "Mail.Send" }; public App() { InitializeComponent(); IdentityClientApp = new PublicClientApplication(ClientID); MainPage = new Leaver.MainPage(); } |
Далее, необходимо создать страницу авторизации. Создайте GraphServiceClient в MainPage.xaml.cs, который будет отвечать за вызов всех будущих API-интерфейсов Graph. Пример реализации можно увидеть в приведенном ниже коде.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private async Task CreateGraphClientAsync() { try { Client = new GraphServiceClient("https://graph.microsoft.com/v1.0", new DelegateAuthenticationProvider(async (requestMessage) => { var tokenRequest = await App.IdentityClientApp.AcquireTokenAsync(App.Scopes, App.UiParent).ConfigureAwait(false); requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", tokenRequest.AccessToken); })); Me = await Client.Me.Request().GetAsync(); Username.Text = $"Welcome {((User)Me).DisplayName}"; return true; } catch (MsalException ex) { await DisplayAlert("Error", ex.Message, "OK", "Cancel"); return false; } } |
Теперь, когда мы инициализировали наш GraphServiceClient, мы можем использовать Graph API для отправки электронной почты:
1 2 3 4 5 6 7 8 | private async void SendEmail(Message message) { if (!UserExists) await CreateGraphClientAsync(); var req = Client.Me.SendMail(message); await req.Request().PostAsync(); Status.Text = $"Email sent to your manager { ((User)Manager).DisplayName }, CC: you"; } |
Шаг 3: Изменения, зависящие от платформы
Функции входа с MSAL ранее были реализованы в Xamarin.Forms с помощью пользовательских средств визуализации — custom renderers. Благодаря этой новой, находящейся в состоянии эксплуатационной готовности предварительной версии MSAL данная функциональность для упрощения реализуется с помощью схемы URL. При этом автоматически инициируется поток проверки подлинности и завершается поток входа.
iOS
В Visual Studio 2017 Preview 3 мы добавили редактор пользовательского интерфейса для Info.plist, где можно зарегистрировать кастомную схему URL:
Завершенный процесс проверки подлинности может обрабатываться в AppDelegate:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public override bool FinishedLaunching(UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init(); LoadApplication(new App()); App.IdentityClientApp.RedirectUri = "msal7214e6cd-85ad-4433-9d13-f2631e1d4142://auth"; return base.FinishedLaunching(app, options); } public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url); return true; } |
Android
Откройте AndroidManifest.xml и добавьте BrowserTabActivity с intent-filter для регистрации схемы URL:
1 2 3 4 5 6 7 8 9 10 | <application android:label="Leaver.Android"> <activity android:name="microsoft.identity.client.BrowserTabActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="msal7214e6cd-85ad-4433-9d13-f2631e1d4142" android:host="auth" /> </intent-filter> </activity> </application> |
Завершенный процесс проверки подлинности может обрабатываться в MainActivity приложения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | protected override void OnCreate(Bundle bundle) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(bundle); global::Xamarin.Forms.Forms.Init(this, bundle); LoadApplication(new App()); App.IdentityClientApp.RedirectUri = "msal7214e6cd-85ad-4433-9d13-f2631e1d4142://auth"; App.UiParent = new UIParent(Xamarin.Forms.Forms.Context as Activity); } protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data); } |
Windows
Библиотека проверки подлинности Microsoft не требует внесения каких-либо изменений для обработки процесса входа в приложения универсальной платформы Windows (UWP).
Шаг 4: Запуск приложения
Когда все будет готово, запустите приложение, чтобы самостоятельно оценить наше приложение «графика отпусков» для iOS, Android и Windows, созданное с помощью Xamarin.Forms, библиотеки проверки подлинности Microsoft и API-интерфейсов Microsoft Graph.
Заключение
Библиотека проверки подлинности Майкрософт — Microsoft Authentication Library (MSAL) упрощает интеграцию приложений с существующими Active Directory (AD) и добавляет механизм аутентификации, величиной во всего лишь несколько строк кода. Интерфейс Microsoft Graph API предоставляет доступ к различным службам, доступным для наших пользователей, таким как почта, календарь, люди и SharePoint из одного API-интерфейса. Чтобы самостоятельно оценить это мобильное приложение можете скачать пример на GitHub.
Автор: Mayur Tendulkar
Источник: Официальный блог Xamarin
Написать ответ