2017-07-04 2 views
0

私の月の長い問題取り巻くさまざまな質問をする別の試み:- MSグラフ

を私は今取得するフロー「オン代理-OF」を開始しようとしていますユーザーがMicrosoftアカウントでログインしたときのMSグラフトークン。ここで説明したよう: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-oauth-on-behalf-of

をクライアントでは、ユーザーがサーバー・フローを使用してログイン:.NETのバックエンドで

var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount); 

を、私はMSグラフトークンを取得しようとしています:

string clientId = "id-shown-in-app-registration-portal"; 
string clientSecret = "secret-shown-in-app-registration-portal"; 
IEnumerable<string> msIdTokenOut = null; 
Request.Headers.TryGetValues("x-ms-token-microsoftaccount-access-token", out msIdTokenOut); 
string msIdToken = msIdTokenOut.FirstOrDefault(); 
AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/common/oauth2/v2.0"); 
UserAssertion assertion = new UserAssertion(msIdToken); 
ClientCredential cred = new ClientCredential(clientId, clientSecret); 
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", cred, assertion); 

次のエラーが表示されます。 aadsts50027:無効なjwtトークン。トークン形式が無効です。

クライアントフロー(取得したトークンでApp Servicesを認証しない)に対してMSALを使用して、サーバーフローからログインに至るまでのあらゆる組み合わせを試しました。これは私を1ヶ月以上夢中にさせてくれました。私は、2つのマイクロソフト製品が一緒に働くために何人もの人が飛び乗ってきたとは思えません。誰かが私を解決策に向かって導くことができれば、私は感謝の意を超えています。

+0

私が知る限り、live sdkトークンは今のところoauthで使用できませんでした。私は、それをテストするためにログインするためのクライアント・フローとサーバー・フローの両方を作成しています。私は、代わりにoauthにリターントークンを使用できないことがわかりました。この機能を追加するには、[feedback](http://feedback.azure.com)をazureチームに追加することをお勧めします。 –

+0

ありがとうございます、私はフィードバックを提出します。今のところ、私のAzure MobileバックエンドにMS Graphのアクセスをどのように含めることができるか、ご意見はありますか?動作するフローはありますか? –

+0

回避策があります。モバイルバックエンドでMSALアクセストークンを使用して簡単な認証を使用しないカスタム認証を有効にすることをお勧めします。 –

答えて

1

これは回避策ですが、MSALが返すアクセストークンを使用してモバイルサーバーのカスタム認証を有効にすることをお勧めします。

詳細は、あなたは以下の手順を参照できます。

まず、あなたは、MicrosoftアカウントでMSALログインを使用するログインページを作成することができます。アクセストークンが返されます。

次に、アクセストークンを使用してモバイルサービスのバックエンドに要求を送信し、認証を求めることができます。

注意:アクセストークンのチェックに使用されたバックエンドのロジックは正しいです。自分で達成する必要があります。アクセスjwtトークンをデコードしてaud値を取得できます。この値がクライアントIDと同じ場合は、ユーザーにモバイルバックエンドデータへのアクセス権があることを意味します。

次に、jwtトークンを使用して、グラフapiからユーザー情報を取得できます。ユーザー情報を取得したら、ユーザー情報の値を認証トークンを生成する要求に設定できます(このメソッドをAppServiceLoginHandler.CreateToken [Add Microsoft.Azure.Mobile.Server.Login NuGet package]を使用して)。このトークンを使用することにより、モバイルクライアントユーザは、モバイルバックエンドにアクセスすることができる。

このようなアクセストークン:

enter image description here

詳細は、モバイルバックエンドでカスタム認証を有効にする方法を知っているこのarticleを参照することができます。

関連する問題