Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
В этом разделе показано, как пройти проверку подлинности пользователей мобильного приложения службы приложений из клиентского приложения. В этом руководстве вы добавите проверку подлинности в проект быстрого запуска Xamarin Forms с помощью поставщика удостоверений, поддерживаемого службой приложений. После успешной аутентификации и авторизации через ваше мобильное приложение отобразится значение идентификатора пользователя, и вы сможете получить доступ к данным ограниченной таблицы.
Предпосылки
Чтобы получить наилучший результат с помощью этого руководства, рекомендуется сначала выполнить руководство по созданию приложения Xamarin Forms . После завершения работы с этим руководством у вас будет проект Xamarin Forms, который является мультиплатформенным приложением TodoList.
Если вы не используете скачанный проект сервера быстрого запуска, необходимо добавить пакет расширения проверки подлинности в проект. Дополнительные сведения о пакетах расширений сервера см. в статье Работа с пакетом SDK серверного сервера .NET для мобильных приложений Azure.
Регистрация приложения для проверки подлинности и настройка служб приложений
Сначала необходимо зарегистрировать приложение на сайте поставщика удостоверений, а затем задать учетные данные, созданные поставщиком, в серверной части мобильных приложений.
Настройте предпочитаемого поставщика удостоверений, следуя инструкциям для конкретного поставщика:
Повторите предыдущие шаги для каждого поставщика, которого вы хотите поддерживать в приложении.
Добавьте своё приложение в список разрешённых URL-адресов для внешнего перенаправления
Для безопасной проверки подлинности необходимо определить новую схему URL-адресов для приложения. Это позволяет системе проверки подлинности перенаправляться обратно в приложение после завершения процесса проверки подлинности. В этом руководстве мы используем URL-схему название приложения на протяжении всего руководства. Однако вы можете использовать любую схему URL-адресов, выбранную вами. Оно должно быть уникальным для мобильного приложения. Чтобы включить перенаправление на стороне сервера, выполните следующие действия.
На портале Azureвыберите службу приложений.
Щёлкните пункт меню Аутентификация / Авторизация.
В разрешенных URL-адресов для внешних перенаправленийвведите
url_scheme_of_your_app://easyauth.callback. url_scheme_of_your_app в этой строке — URL-схема для вашего мобильного приложения. Он должен соответствовать обычной спецификации URL-адреса для протокола (использовать только буквы и цифры и начинать с буквы). Следует заметить строку, которую вы выберете, так как вам потребуется настроить код мобильного приложения с помощью схемы URL-адресов в нескольких местах.Нажмите кнопку ОК.
Нажмите кнопку Сохранить.
Ограничение разрешений для пользователей, прошедших проверку подлинности
По умолчанию API-интерфейсы в серверной части мобильных приложений можно вызывать анонимно. Затем необходимо ограничить доступ только к прошедшим проверку подлинности клиентам.
Node.js внутренний интерфейс (через портал Azure):
В параметрах мобильных приложений нажмите Easy Tables и выберите свою таблицу. Щелкните Изменить разрешения, выберите только проверенный доступ для всех разрешений, а затем нажмите Сохранить.
.NET бэкэнд (C#):
В проекте сервера перейдите к контроллерам>TodoItemController.cs. Добавьте атрибут
[Authorize]в класс TodoItemController, как показано ниже. Чтобы ограничить доступ только к определенным методам, этот атрибут также можно применить только к этим методам, а не к классу. Переопубликуйте серверный проект.[Authorize] public class TodoItemController : TableController<TodoItem>Node.js бекенд (через код Node.js):
Чтобы требовать проверку подлинности для доступа к таблицам, добавьте следующую строку в скрипт сервера Node.js:
table.access = 'authenticated';Дополнительные сведения см. в разделе Практическое руководство. Требование проверки подлинности для доступа к таблицам. Сведения о том, как скачать проект кода быстрого запуска с сайта, см. в статье Практическое руководство. Скачивание проекта кода внутреннего руководства Node.js с помощью Git.
Добавление проверки подлинности в переносимую библиотеку классов
Мобильные приложения используют метод расширения LoginAsync в MobileServiceClient для входа пользователя с проверкой подлинности службы приложений. В этом примере используется поток проверки подлинности, управляемый сервером, который отображает интерфейс входа поставщика в приложение. Дополнительные сведения см. в разделе "Управляемая сервером проверка подлинности". Чтобы обеспечить лучший пользовательский интерфейс в рабочем приложении, следует вместо этого использовать управляемую клиентом проверку подлинности.
Чтобы выполнить проверку подлинности с помощью проекта Xamarin Forms, определите интерфейс IAuthenticate в переносимой библиотеке классов для приложения. Затем добавьте кнопку входа в пользовательский интерфейс, определенный в переносимой библиотеке классов, которую щелкните, чтобы начать проверку подлинности. Данные загружаются из серверной части мобильного приложения после успешной проверки подлинности.
Реализуйте интерфейс IAuthenticate для каждой платформы, поддерживаемой приложением.
В Visual Studio или Xamarin Studio откройте App.cs из проекта с переносимым именем, который является проектом переносимой библиотеки классов, а затем добавьте следующую
usingинструкцию:```csharp using System.Threading.Tasks; ```В App.cs добавьте следующее
IAuthenticateопределение интерфейса непосредственно перед определениемAppкласса.```csharp public interface IAuthenticate { Task<bool> Authenticate(); } ```Чтобы инициализировать интерфейс с реализацией для конкретной платформы, добавьте в класс App следующие статические члены.
```csharp public static IAuthenticate Authenticator { get; private set; } public static void Init(IAuthenticate authenticator) { Authenticator = authenticator; } ```Откройте TodoList.xaml из проекта переносимой библиотеки классов, добавьте следующий элемент Button в элемент макета buttonPanel после существующей кнопки:
```xml <Button x:Name="loginButton" Text="Sign-in" MinimumHeightRequest="30" Clicked="loginButton_Clicked"/> ```Эта кнопка активирует управляемую сервером проверку подлинности с серверной частью мобильного приложения.
Откройте TodoList.xaml.cs из проекта переносимой библиотеки классов, а затем добавьте в класс следующее
TodoListполе:```csharp // Track whether the user has authenticated. bool authenticated = false; ```Замените метод OnAppearing следующим кодом:
```csharp protected override async void OnAppearing() { base.OnAppearing(); // Refresh items only when authenticated. if (authenticated == true) { // Set syncItems to true in order to synchronize the data // on startup when running in offline mode. await RefreshItems(true, syncItems: false); // Hide the Sign-in button. this.loginButton.IsVisible = false; } } ```Этот код гарантирует, что данные обновляются только из службы после проверки подлинности.
Добавьте следующий обработчик события Clicked в класс TodoList :
```csharp async void loginButton_Clicked(object sender, EventArgs e) { if (App.Authenticator != null) authenticated = await App.Authenticator.Authenticate(); // Set syncItems to true to synchronize the data on startup when offline is enabled. if (authenticated == true) await RefreshItems(true, syncItems: false); } ```Сохраните изменения и перестройте проект переносимой библиотеки классов, убедившись, что ошибок нет.
Добавление проверки подлинности в приложение Android
В этом разделе показано, как реализовать интерфейс IAuthenticate в проекте приложения Android. Пропустите этот раздел, если вы не поддерживаете устройства Android.
В Visual Studio или Xamarin Studio щелкните правой кнопкой мыши проект droid , а затем задайте в качестве проекта startUp.
Нажмите клавишу F5, чтобы запустить проект в отладчике, а затем убедитесь, что необработанное исключение с кодом состояния 401 (несанкционированное) возникает после запуска приложения. Код 401 создается, так как доступ к серверной части ограничен только авторизованными пользователями.
Откройте MainActivity.cs в проекте Android и добавьте следующие
usingинструкции:```csharp using Microsoft.WindowsAzure.MobileServices; using System.Threading.Tasks; ```Обновите класс MainActivity для реализации интерфейса IAuthenticate следующим образом:
```csharp public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity, IAuthenticate ```Обновите класс MainActivity , добавив поле MobileServiceUser и метод Аутентификации , необходимый интерфейсу IAuthenticate , как показано ниже.
```csharp // Define an authenticated user. private MobileServiceUser user; public async Task<bool> Authenticate() { var success = false; var message = string.Empty; try { // Sign in with Facebook login using a server-managed flow. user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(this, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); if (user != null) { message = string.Format("you are now signed-in as {0}.", user.UserId); success = true; } } catch (Exception ex) { message = ex.Message; } // Display the success or failure message. AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.SetMessage(message); builder.SetTitle("Sign-in result"); builder.Create().Show(); return success; } public override void OnResume() { base.OnResume(); Xamarin.Essentials.Platform.OnResume(); } ```Если вы используете поставщик удостоверений, отличный от Facebook, выберите другое значение для MobileServiceAuthenticationProvider.
Обновите файлAndroidManifest.xml добавив следующий XML-код в элемент
<application>.<activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" android:noHistory="true"> <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="{url_scheme_of_your_app}" android:host="easyauth.callback" /> </intent-filter> </activity>Замените
{url_scheme_of_your_app}на вашу схему URL.Добавьте следующий код в метод OnCreate класса MainActivity перед вызовом
LoadApplication():```csharp // Initialize the authenticator before loading the app. App.Init((IAuthenticate)this); ```Этот код гарантирует, что средство проверки подлинности инициализируется до загрузки приложения.
Перестройте приложение, запустите его, а затем войдите с помощью выбранного поставщика проверки подлинности и убедитесь, что вы можете получить доступ к данным в качестве пользователя, прошедшего проверку подлинности.
Устранение неполадок
Приложение дало сбой с Java.Lang.NoSuchMethodError: No static method startActivity
В некоторых случаях конфликты в пакетах поддержки отображаются как предупреждение в Visual Studio, но приложение завершает работу с этим исключением во время выполнения. В этом случае необходимо убедиться, что все пакеты поддержки, на которые ссылается проект, имеют одну и ту же версию. Пакет NuGet для мобильных приложений Azure имеет Xamarin.Android.Support.CustomTabs зависимость для платформы Android, поэтому если проект использует новые пакеты поддержки, необходимо установить этот пакет с требуемой версией напрямую, чтобы избежать конфликтов.
Добавление проверки подлинности в приложение iOS
В этом разделе показано, как реализовать интерфейс IAuthenticate в проекте приложения iOS. Пропустите этот раздел, если вы не поддерживаете устройства iOS.
В Visual Studio или Xamarin Studio щелкните правой кнопкой мыши проект iOS, а затем установите как стартовый проект.
Нажмите клавишу F5, чтобы запустить проект в отладчике, а затем убедитесь, что необработанное исключение с кодом состояния 401 (несанкционированное) возникает после запуска приложения. Ответ 401 создается, так как доступ к серверной части ограничен только авторизованными пользователями.
Откройте AppDelegate.cs в проекте iOS и добавьте следующие
usingутверждения.```csharp using Microsoft.WindowsAzure.MobileServices; using System.Threading.Tasks; ```Обновите класс AppDelegate , чтобы реализовать интерфейс IAuthenticate следующим образом:
```csharp public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate, IAuthenticate ```Обновите класс AppDelegate , добавив поле MobileServiceUser и метод аутентификации , который требуется интерфейсом IAuthenticate , как показано ниже.
```csharp // Define an authenticated user. private MobileServiceUser user; public async Task<bool> Authenticate() { var success = false; var message = string.Empty; try { // Sign in with Facebook login using a server-managed flow. if (user == null) { user = await TodoItemManager.DefaultManager.CurrentClient .LoginAsync(UIApplication.SharedApplication.KeyWindow.RootViewController, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); if (user != null) { message = string.Format("You are now signed-in as {0}.", user.UserId); success = true; } } } catch (Exception ex) { message = ex.Message; } // Display the success or failure message. UIAlertController avAlert = UIAlertController.Create("Sign-in result", message, UIAlertControllerStyle.Alert); avAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null)); UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(avAlert, true, null); return success; } ```Если вы используете поставщик удостоверений, отличный от Facebook, следует выбрать другое значение [MobileServiceAuthenticationProvider].
Обновите класс AppDelegate , добавив перегрузку метода OpenUrl следующим образом:
```csharp public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { if (TodoItemManager.DefaultManager.CurrentClient.ResumeWithURL(app, url, options)) return true; return base.OpenUrl(app, url, options); } ```Добавьте следующую строку кода в метод FinishedLaunching перед вызовом
LoadApplication():```csharp App.Init(this); ```Этот код гарантирует, что средство проверки подлинности инициализируется до загрузки приложения.
Откройте Info.plist и добавьте тип URL-адреса. Задайте идентификатор на имя по вашему выбору, схемы URL на схему URL вашего приложения, и роль на «Нет».
Перестройте приложение, запустите его, а затем войдите с помощью выбранного поставщика проверки подлинности и убедитесь, что вы можете получить доступ к данным в качестве пользователя, прошедшего проверку подлинности.
Добавление аутентификации в проекты приложений Windows 10, включая телефоны
В этом разделе показано, как реализовать интерфейс IAuthenticate в проектах приложений Windows 10. Те же действия применяются к проектам универсальной платформы Windows (UWP), но с помощью проекта UWP (с отмеченными изменениями). Пропустите этот раздел, если вы не поддерживаете устройства Windows.
В Visual Studio щелкните правой кнопкой мыши проект UWP , а затем задайте проект startUp.
Нажмите клавишу F5, чтобы запустить проект в отладчике, а затем убедитесь, что необработанное исключение с кодом состояния 401 (несанкционированное) возникает после запуска приложения. Ответ 401 происходит, так как доступ к серверной части ограничен только авторизованными пользователями.
Откройте MainPage.xaml.cs для проекта приложения Windows и добавьте следующие
usingинструкции:```csharp using Microsoft.WindowsAzure.MobileServices; using System.Threading.Tasks; using Windows.UI.Popups; using <your_Portable_Class_Library_namespace>; ```Замените
<your_Portable_Class_Library_namespace>на пространство имен для переносимой библиотеки классов.Обновите класс MainPage , чтобы реализовать интерфейс IAuthenticate следующим образом:
public sealed partial class MainPage : IAuthenticateОбновите класс MainPage , добавив поле MobileServiceUser и метод Аутентификации , который требуется интерфейсом IAuthenticate , как показано ниже.
```csharp // Define an authenticated user. private MobileServiceUser user; public async Task<bool> Authenticate() { string message = string.Empty; var success = false; try { // Sign in with Facebook login using a server-managed flow. if (user == null) { user = await TodoItemManager.DefaultManager.CurrentClient .LoginAsync(MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); if (user != null) { success = true; message = string.Format("You are now signed-in as {0}.", user.UserId); } } } catch (Exception ex) { message = string.Format("Authentication Failed: {0}", ex.Message); } // Display the success or failure message. await new MessageDialog(message, "Sign-in result").ShowAsync(); return success; } ```Если вы используете поставщик удостоверений, отличный от Facebook, выберите другое значение для MobileServiceAuthenticationProvider.
Добавьте следующую строку кода в конструктор для класса MainPage перед вызовом
LoadApplication():```csharp // Initialize the authenticator before loading the app. <your_Portable_Class_Library_namespace>.App.Init(this); ```Замените
<your_Portable_Class_Library_namespace>с пространством имен для вашей переносимой библиотеки классов.При использовании UWP добавьте следующий метод OnActivated в класс App :
```csharp protected override void OnActivated(IActivatedEventArgs args) { base.OnActivated(args); if (args.Kind == ActivationKind.Protocol) { ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs; MobileServiceClientExtensions.ResumeWithURL(TodoItemManager.DefaultManager.CurrentClient,protocolArgs.Uri); } } ```Откройте файл Package.appxmanifest и добавьте в него объявление протокола. Установите отображаемое имя как имя по вашему выбору, и Имя как схему URL для вашего приложения.
Перестройте приложение, запустите его, а затем войдите с помощью выбранного поставщика проверки подлинности и убедитесь, что вы можете получить доступ к данным в качестве пользователя, прошедшего проверку подлинности.
Дальнейшие действия
Теперь, когда вы выполнили это базовое руководство по проверке подлинности, рассмотрите возможность продолжения работы с одним из следующих руководств:
Добавление push-уведомлений в приложение
Узнайте, как добавить в приложение поддержку push-уведомлений и настроить серверную часть мобильного приложения, чтобы использовать Центры уведомлений Azure для отправки push-уведомлений.
Включить автономную синхронизацию для приложения
Узнайте, как добавить автономную поддержку приложения с помощью серверной части мобильного приложения. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевого подключения нет.