0

Windows UWPをターゲットとするXamarin Formsアプリケーションがあります。私はこの記事のようなマイクロソフトの文書に従って、オフライン同期と認証をセットアップしました。https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-usersAzure App Service認証 - 認証が失敗した場合でもデータを抜きました

Windowsユニバーサルランタイムコンポーネントを使用して実行するためのバックグラウンド(アウトオブプロセス)タスクも正常にセットアップしました。

プロセスフローは次のようになります。 1)ユーザーはアプリケーションを初めて実行し、Active Directoryにログインして認証する必要があります。アプリケーションはトークンをキャッシュし、バックグラウンドタスクを登録します。

2)バックグラウンドタスクは、タイマーで開始します。テスト中に、トークンの有効期限を1時間に設定し、プロセスをリフレッシュするために、トークンをリフレッシュする必要はありませんでした。

私のテストでは、私が完全に理解していない2つのものを発見しました。

1)最初のログイン時にユーザーが受け取るトークンの有効期限を調べると、有効期限は今後30日間に設定されます。 1時間後に期限が切れるはずだと思った。 30日の有効期限が表示されるのはなぜですか? (これは、1時間後にアクセスを許可しないことを確認したように、あまりにも大きな懸念事項ではなく、私が観察している奇妙なことです)。

2)これは私が心配しているものです。バックグラウンドタスクは1時間後に認証できませんでしたが、Azureからデバイスにデータを引き出すことができました。認証に失敗したためプッシュデータの同期に失敗しましたが、プルデータの同期は成功しました。これは、私が許可されていないデータを取得しようとしないようにするためです。 他に誰かがこれに遭遇しましたか?これはバグですか?何とか不正な認証を設定しましたか?

マイセッティング:

Azureのアプリケーションサービス>簡単にテーブル(Node.jsのバックエンド)は、 "認証されたアクセスのみ" に設定されているすべての権限を持っています。

Azureのアプリケーションサービス]> [設定]> [認証/承認>

  • アプリケーションサービスの認証がオンに設定され、要求が認証されていない場合に取る
  • アクションがAzureでのActive Directoryを使用してログインするように設定され、
  • 認証プロバイダがAzure Active Directory用に設定されています。

モバイルアプリコード:

MobileServiceClient client; 
IMobileServiceSyncTable<TableToPull> tableToPullDataFrom; 
IMobileServiceSyncTable<TableToPush> tableToPushDataTo; 
this.client = new MobileServiceClient(Constants.ApplicationURL); 
this.client.CurrentUser = new MobileServiceUser(Settings.UserId); 
this.client.CurrentUser.MobileServiceAuthenticationToken = Settings.AuthToken; 
store.DefineTable<TableToPull>(); 
store.DefineTable<TableToPush>(); 

(認証が失敗した場合に予想されるように、失敗した)非同期コードでプッシュ:

await this.client.SyncContext.PushAsync(); 

認証失敗するプル非同期コード、失敗しましたが、これは私の心配です。

await this.tableToPullDataFrom.PullAsync("tableQuery",this.tableToPullDataFrom.CreateQuery()); 

私は、バックグラウンドタスクが認証が失敗したにもかかわらずAzureからデータを引き出すことができたと懸念しています。私は何らかの形でこのコンセプトを誤解していると思いますが、誰かが私にこれがどうして起こるのかを説明することができれば幸いです。あるいは、何か別のものを設定する必要があるのですか?不正なログインがデータを取得できないようにする必要があります。

バックグラウンドタスクはデータを順番にプッシュしてプルしようとしますが、プッシュタスク中に無効な認証が原因で失敗しましたが、プルタスクでは成功しています。 SQL Azure DBから更新されたデータを取得しますが、変更されたデータはSQL Azure DBに送信されません(SSMSで表示されます)。

+0

「トークン」の意味を詳しく説明します。具体的には、クライアント認証を使用していますか?トークンはどこで手に入りますか?各トークンを参照するときに、どのトークン(認証プロバイダまたはZUMOトークン)を意味しますか?あなたは2つのトークンを扱っています.1つは認証プロバイダから、もう1つはZUMOからです。 –

+0

以下のコードを使用して認証トークンを取得します: – Stacy

+0

申し訳ありませんが、私はSHIFT + EnterではなくEnterを押すことに慣れています。 以下のコードを使用してトークンを取得します。 'MobileServiceUser user = await TodoDataManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory、new Dictionary (){{"response_type"、 "code id_token"} }); ' 次に、設定にトークンを保存します(私はXam.Plugin.Settings NuGetを使用しています): 'Settings.AuthToken = user.MobileServiceAuthenticationToken; 保存しているトークンは認証プロバイダからのものだと思いますが、私は確信していません。私はX-ZUMO-AUTHヘッダーを引っ張っていません。 – Stacy

答えて

1

「認証が失敗した場合の対処方法」が間違っています。それを「アクションなし」に設定する必要があります。これは、認証があなたのコードによって処理できるようにするためです。

簡易テーブルを使用している場合は、テーブルのアクセス許可を「認証済み」に調整します。 ASP.NETを使用している場合は、クラスに[Authorize]属性を追加します。

認証については、本の第2章のhttp://aka.ms/zumobookで詳しく説明しています。

関連する問題