2016-04-03 6 views
1

私はAzureで.NETバックエンドを使用するXamarin.Formsアプリケーションでカスタム認証を実装していますが、コントローラの中には[Authorize]というマークが付いています。私は多数のブログや記事の指示に従ってきましたが、認証されていないTableController呼び出しをログイン画面にする方法や、同じ認証サブシステムにアクセスする方法についてはまだ不明ですloginAsyncはuserIdやトークン情報を設定して複数MobileServiceClientのインスタンスは、最新のuserIdおよびMobileServiceAuthenticationToken値を保持します。ログインページを正しく起動し、同じ認証サブシステムのuserId/tokenを更新するにはどうすればいいですか?MobileServiceClientは他のOOTBプロバイダにアクセスしますか?Azure Mobile App Servicesクライアントで、loginAsyncが動作するようにuserIdを設定するにはどうすればよいですか?

答えて

3

[許可]とマークされたバックエンドにアクセスしようとすると、認証ヘッダーが提供されない(技術的には有効なJWTを持つX-ZUMO-AUTHヘッダー)場合、サービスは401 Unauthenticatedを返します。これをトラップするにはいくつかの方法がありますが、操作は失敗します(Xamarin.Formsアプリケーションでは、MobileServiceInvalidOperationExceptionが発生します)。このケースを処理し、loginAsync()を呼び出して操作を再試行する必要があります。

複数のMobileServiceClientを持つべきではありません。グローバルスコープに配置する必要があります(DIを使用して注入するか、Appコンテキストで静的にするだけです)。 MobileServiceUserは、生成されたすべてのテーブルで使用されます。

+0

私は数ヶ月間、これについての答えを探してきました。 MobileServiceInvalidOperatiomExceptionをトラップする最良の方法は何ですか?私はPostSharpのようなものを使って[保護された]関数やクラスを飾るカスタム属性を作成することを考えていたので、認証コードを1か所に保存することができます。私が見たもう1つの方法は、応答をプロキシすることで認証を完全に置き換え、手動でX-ZUMO-AUTHヘッダ(James MontemagnoのCofeeCups)を追加するDelegatingHandlerです。ステータス401をトラップしてloginAsyncを呼び出すための推奨される方法がありますか? – Aaron

+0

私は、ログインを明示的にすることをお勧めします。私はそれをクリックするとloginAsync()を呼び出すUIのアイコンを持っています。 –

関連する問題