- アンドロイド
- コルドバ
- iOS
- ウィンドウズ
- Xamarin.Android
- Xamarin.Forms
- Xamarin.iOS
概要
このトピックでは、クライアント アプリケーションからモバイル アプリのユーザーを認証する方法について説明します。 このチュートリアルでは、Azure Mobile Apps でサポートされている ID プロバイダーを使用して、クイック スタート プロジェクトに認証を追加します。 モバイル アプリで正常に認証および承認されると、ユーザー ID 値が表示されます。
このチュートリアルは、モバイル アプリのクイックスタートに基づいています。 また、最初に チュートリアル「Xamarin.Android アプリを作成する」も完了する必要があります。 ダウンロードしたクイック スタート サーバー プロジェクトを使用しない場合は、認証拡張機能パッケージをプロジェクトに追加する必要があります。 サーバー拡張機能パッケージの詳細については、「.NET バックエンド サーバー SDK for Azure Mobile Appsを使用する」を参照してください。
認証用にアプリを登録し、App Services を構成する
まず、ID プロバイダーのサイトでアプリを登録する必要があります。次に、Mobile Apps バックエンドでプロバイダーによって生成された資格情報を設定します。
プロバイダー固有の手順に従って、優先 ID プロバイダーを構成します。
アプリでサポートするプロバイダーごとに、前の手順を繰り返します。
許可された外部リダイレクト URL にアプリを追加する
セキュリティで保護された認証では、アプリの新しい URL スキームを定義する必要があります。 これにより、認証プロセスが完了すると、認証システムはアプリにリダイレクトし直すことができます。 このチュートリアルでは、appname のURLスキームを全体にわたって使用します。 ただし、選択した任意の URL スキームを使用できます。 モバイル アプリケーションに固有である必要があります。 サーバー側でリダイレクトを有効にするには:
[Azure portal] で、App Service を選択します。
認証/承認 メニュー オプションをクリックします。
許可された外部リダイレクト URLに、「
url_scheme_of_your_app://easyauth.callback
」と入力します。 この文字列の url_scheme_of_your_app は、モバイル アプリケーションの URL スキームです。 プロトコルの通常の URL 仕様に従う必要があります (文字と数字のみを使用し、文字で始めます)。 複数の場所で URL スキームを使用してモバイル アプリケーション コードを調整する必要がある場合は、選択した文字列を書き留める必要があります。OK をクリックします。
[保存] をクリックします。
認証されたユーザーにアクセス許可を制限する
既定では、Mobile Apps バックエンドの API は匿名で呼び出すことができます。 次に、認証されたクライアントのみにアクセスを制限する必要があります。
バックエンド Node.js (Azure portal 経由):
Mobile Apps の設定で、[簡単なテーブル] クリックし、テーブルを選択します。 [アクセス許可 変更] をクリックし、すべてのアクセス許可 [認証済みアクセスのみ] を選択し、[の保存]クリックします。
.NET バックエンド (C#) :
サーバー プロジェクトで、Controllers>TodoItemController.csに移動します。 次のように、
[Authorize]
クラスに 属性を追加します。 特定のメソッドにのみアクセスを制限するには、クラスではなく、これらのメソッドにのみこの属性を適用することもできます。 サーバープロジェクトを再公開します。[Authorize] public class TodoItemController : TableController<TodoItem>
バックエンド Node.js (Node.js コード経由):
テーブル アクセスの認証を要求するには、Node.js サーバー スクリプトに次の行を追加します。
table.access = 'authenticated';
詳細については、「方法:テーブルへのアクセスに認証を要求する」を参照してください。 サイトからクイック スタート コード プロジェクトをダウンロードする方法については、「方法: Gitを使用して Node.js バックエンド クイックスタート コード プロジェクトをダウンロードする」を参照してください。
Visual Studio または Xamarin Studio で、デバイスまたはエミュレーターでクライアント プロジェクトを実行します。 アプリの起動後に、状態コードが 401 (Unauthorized) の未処理の例外が発生することを確認します。 これは、アプリが認証されていないユーザーとしてモバイル アプリ バックエンドにアクセスしようとしたために発生します。 TodoItem テーブルで認証が必要になりました。
次に、認証されたユーザーを使用してモバイル アプリ バックエンドからリソースを要求するようにクライアント アプリを更新します。
アプリに認証を追加する
データが表示される前に、ユーザーが サインイン ボタンをタップして認証するように、アプリが更新されます。
TodoActivity クラスに次のコードを追加します。
// Define an authenticated user. private MobileServiceUser user; private async Task<bool> Authenticate() { var success = false; try { // Sign in with Facebook login using a server-managed flow. user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); CreateAndShowDialog(string.Format("you are now logged in - {0}", user.UserId), "Logged in!"); success = true; } catch (Exception ex) { CreateAndShowDialog(ex, "Authentication failed"); } return success; } [Java.Interop.Export()] public async void LoginUser(View view) { // Load data only after authentication succeeds. if (await Authenticate()) { //Hide the button after authentication succeeds. FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone; // Load the data. OnRefreshItemsSelected(); } } public override void OnResume() { base.OnResume(); Xamarin.Essentials.Platform.OnResume(); }
これにより、ユーザーを認証するための新しいメソッドと、新しい サインイン ボタンのメソッド ハンドラーが作成されます。 上記のコード例のユーザーは、Facebook ログインを使用して認証されます。 ダイアログは、認証後にユーザー ID を表示するために使用されます。
注
Facebook 以外の ID プロバイダーを使用している場合は、上記 の LoginAsync に渡される値を 、MicrosoftAccount、 Twitter、 Google、 または WindowsAzureActiveDirectory のいずれかに変更します。
OnCreate メソッドで、次のコード行を削除またはコメントアウトします。
OnRefreshItemsSelected ();
Activity_To_Do.axml ファイルで、既存の AddItem ボタンの前に次の LoginUser ボタン定義を追加します。
<Button android:id="@+id/buttonLoginUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="LoginUser" android:text="@string/login_button_text" />
Strings.xml リソース ファイルに次の要素を追加します。
<string name="login_button_text">Sign in</string>
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>
Visual Studio または Xamarin Studio で、デバイスまたはエミュレーターでクライアント プロジェクトを実行し、選択した ID プロバイダーでサインインします。 正常にログインすると、アプリにログイン ID と todo 項目の一覧が表示され、データを更新できます。
トラブルシューティング
でアプリケーションがクラッシュしました Java.Lang.NoSuchMethodError: No static method startActivity
場合によっては、サポート パッケージの競合が Visual Studio の警告として表示されますが、実行時にこの例外が発生してアプリケーションがクラッシュします。 この場合は、プロジェクトで参照されているすべてのサポート パッケージのバージョンが同じであることを確認する必要があります。
Azure Mobile Apps NuGet パッケージ には Android プラットフォーム Xamarin.Android.Support.CustomTabs
依存関係があるため、プロジェクトで新しいサポート パッケージを使用する場合は、競合を回避するために、必要なバージョンでこのパッケージを直接インストールする必要があります。