2017-09-28 11 views
2

私はモバイルアプリケーションを持っており、認証にMicrosoft Graph-APIを使用したいと考えています。 Microsoft.Identity.Client名前空間を使用しています。私はMicrosoft Graph-APIとAzureモバイルアプリケーション

authResult = await App.PublicClientApp.AcquireTokenAsync(_scopes); 

を呼び出すことによって、そこにトークンを取得することができ、私は

azureUser = await App.MobileService.LoginWithMicrosoftAccountAsync(authResult.AccessToken); 

を呼び出すことで、私のモバイルアプリにこのトークンを渡すとき、私はMobileServiceInvalidOperationExceptionを受け取る「あなたは、このディレクトリまたはページを表示する権限がありません"

私は自分のアプリをアプリケーション登録ポータルに登録しました。アズールで Registration Portal

それは次のようになります。 Azure Portal

何ディ私が間違っています?

敬具、

マーティン

答えて

2

簡単認証は(MSALライブラリを使用この場合)のAzureのADのV2.0から発行されたアクセストークンを使用してトークンを交換しサポートしていません。

モバイルクライアントのクライアントフローを使用するには、OneDrive認証ライブラリを使用して、Microsoftアカウントのエンドポイントからトークンを取得します。 は、ここにあなたの参考のために同様のスレッドです:

Desktop client flow for MicrosoftAccount access to Azure Mobile Service API

、以下のコードは私のためにうまく機能です:

public async Task TestEasyAuthAsync() 
{ 

    string acess_token = await AcquireTokenForLiveAccount(); 
    string applicationUrl = "https://mobilefei.azurewebsites.net/"; 
    var mobileClient = new MobileServiceClient(applicationUrl); 

    JObject token = new JObject(); 
    token.Add("access_token", acess_token); 
    var user = await mobileClient.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount, token); 
    Console.WriteLine($"UserID:\n{user.UserId}"); 

    var result = await mobileClient.InvokeApiAsync(@"/.auth/me"); 
    Console.Read(); 
} 

public async Task<string> AcquireTokenForLiveAccount() 
{ 
    var msAuth = new MsaAuthenticationProvider("57336bd5-a80f-4b48-a29a-07fdea6ef91e", "https://login.microsoftonline.com/common/oauth2/nativeclient", new string[] { "wl.signin", "wl.offline_access" }); 
    await msAuth.AuthenticateUserAsync(); 
    return msAuth.CurrentAccountSession.AccessToken; 
} 
+0

こんにちは、 あなたは私の一日行わ!できます!どうもありがとうございました! もう1つの質問:-(私はこの権利のアクセスを確認する必要があります: 自動ログオン、常に情報アクセス、アプリの基本プロファイル、ログインするたびにどうすれば保存できますか? ありがとうございます、 Martin –

+0

この問題を解決するには、**統合されたアプリケーション**の代わりに** Live SDKアプリケーション**を登録することができます。次に、 'public MsaAuthenticationProvider(string clientId 、string clientSecret、string returnUrl、string [] scope、CredentialCache credentialCache); '秘密を提供するMsaAuthenticationProvider'クラスを新規に作成します。 –

関連する問題