-1

AAD B2Cを使用してXamarin.Formsアプリでリフレッシュトークンを設定しようとしています。すべてをセットアップしましたが、MobileServiceClientLoginAsyncを呼び出すと問題にぶつかります。 MobileServiceClient 2番目のパラメータのためのDictionary<string, string>を取らないことを除いてAzure App ServiceとXamarin.FormsでのAAD B2Cでのリフレッシュトークンの使用

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, 
    new Dictionary<string, string>() { { "response_type", "code id_token" } }); 

docsと例のすべてが、私はこれに私のLoginAsync方法を更新するためにショーを見つけることができます。それにはJObjectが必要です。私はJObjectどこでもを使用する例を見つけることができません

var authResult = await App.AuthenticationClient.AcquireTokenAsync(Constants.Scopes, "", UiOptions.SelectAccount, string.Empty, null, Constants.Authority, Constants.Policy); 

var payload = new JObject(); 
payload["access_token"] = authResult.Token; 

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

:ここに私の現在のコードは次のようになります。
ペイロードにpayload["response_type"] = "code id_token";を追加するのと同じくらい簡単ですか?

+0

この問題は解決しましたか、さらに支援が必要ですか? –

答えて

-1

モバイルアプリケーションは、2つの認証フロー(client-managed flowserver-managed flow)をサポートしています。

クライアント管理認証

アプリ独立してアイデンティティプロバイダに連絡して、あなたのバックエンドでログイン中に返されたトークンを提供することができます。このクライアントフローを使用すると、ユーザーに対してシングルサインオンエクスペリエンスを提供したり、IDプロバイダーから追加のユーザーデータを取得したりすることができます。

あなたはトークンを取得した後、次のようにあなたが JObjectインスタンスにトークンを渡すことによって、あなたの紺碧のモバイルバックエンドでのログインです

:クライアント・フローを介して他のIDプロバイダーの詳細については

JObject payload = new JObject(); 
payload["access_token"] = ar.AccessToken; 
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

あなたはClient-managed authenticationを参照することができます。

サーバー管理認証

アプリに直接接触するモバイルバックエンド、そしてあなたの紺碧のモバイルバックエンドの連絡先アイデンティティプロバイダとログインしたユーザーを提供します。 Xamarin.Forms UWP Appの

  • 次のように、あなたがログインできますXamarin.Forms iOSアプリの場合

enter image description here

  • を次のように、あなたがログインできます。enter image description here

Xamarin.Formsのサーバー管理認証の詳細については、を参照してください。。

UPDATE:私はあなたがPCLでMobileServiceClient.LoginAsyncを呼び出す場合、あなたはLoginAsyncのために任意の拡張子を見ることができなかったことを確認している

。ご覧のとおり、各プラットフォームのMicrosoft.WindowsAzure.Mobile.Ext.dllには、多くの拡張子LoginAsyncのメソッドがあります。 IAuthenticateインターフェイスを定義し、各アプリケーション(uwp、android、iosなど)に実装する必要があります。詳しくはhereを参照してください。

+0

あなたのライブプロジェクトのスクリーンショットですか? Microsoft.Azure.Mobile.Clientの私のバージョンは 'portable-win + net45 + wp8 + wpa81 + monotouch + monoandroid \ Microsoft.WindowsAzure.Mobile.dll'であり、それはNuGetの最新フルリリースです。また、DictionaryパラメータにLoginAsync()がありません。 – Marcus

+1

そして、サーバフローとクライアントフローの唯一の違いは、クライアントフローが 'AcquireTokenAsync()'メソッドからのトークンを使用し、 'LoginAsync()'メソッドの 'payload'メソッドに渡すという点だけです。 – Marcus

+0

あなたのコメントによると、私はあなたのPCLで 'MobileServiceClient.LoginAsync'を呼び出すことを前提としていました。ご覧のように、各プラットフォームの 'Microsoft.WindowsAzure.Mobile.Ext.dll'には、多くの拡張LoginAsyncメソッドがあります。 'IAuthenticate'インターフェースを定義し、それを各アプリケーション(uwp、android、iosなど)に実装する必要があります。詳細については、[here](https://docs.microsoft.com/ja)を参照してください。 -us/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started-users#ポータルクラスライブラリへの認証の追加) –

関連する問題