2016-08-03 21 views
0

VS2013でテンプレートプロジェクトからMicrosoftグラフAPIを呼び出すには、問題に私が直面してるブレークダウンである:私は、マルチテナント組織 アカウントでVS2013、MVCからプロジェクトを作成し のAzure Active Directoryのここ

  • ログインは、プロジェクトテンプレートは、私のために正常に動作しますが、私はより多く必要とする認証
  • のためのAADを使用して、私は コールグラフAPI
  • に必要なグラフAPIを呼び出すgithubの上sampleプロジェクトはまた、独自に正常に動作しますが、我々同じコンセプトをプロジェクトに適用する必要があるVS2013
  • からテンプレートに基づいて
  • 同様の の方法を使用して当社のソリューションからグラフAPIを呼び出そうとすると、それはここで

を動作しません、私がしてきた苦しみをまとめたものです最後の数日を経て

VS2013のプロジェクトテンプレートは、アカウントのコントローラでサインイン方式のため、このコードを使用しています。

WsFederationConfiguration config = FederatedAuthentication.FederationConfiguration.WsFederationConfiguration; 
     string callbackUrl = Url.Action("Index", "Home", routeValues: null, protocol: Request.Url.Scheme); 
     SignInRequestMessage signInRequest = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest(
      uniqueId: String.Empty, 
      returnUrl: callbackUrl, 
      rememberMeSet: false); 
     signInRequest.SetParameter("wtrealm", IdentityConfig.Realm ?? config.Realm); 
     return new RedirectResult(signInRequest.RequestUrl.ToString()); 

githubのからのサンプルプロジェクトは、この使用しています:起動クラスに続いて

HttpContext.GetOwinContext() 
       .Authentication.Challenge(new AuthenticationProperties {RedirectUri = "/"}, 
        OpenIdConnectAuthenticationDefaults.AuthenticationType); 

をそれがAuthorizationCodeReceivedをキャプチャこのように:

app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions 
      { 

       ClientId = clientId, 
       Authority = Authority, 
       PostLogoutRedirectUri = postLogoutRedirectUri, 

       Notifications = new OpenIdConnectAuthenticationNotifications() 
       { 
        // 
        // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away. 
        // 

        AuthorizationCodeReceived = (context) => 
        { 
         var code = context.Code; 

次に、それをth EA TokenCache、グラフAPIを呼び出すとき、それは私が実行しようとしましたこれは何

   AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, 
       new NaiveSessionCache(userObjectID)); 
      ClientCredential credential = new ClientCredential(clientId, appKey); 
      result = authContext.AcquireTokenSilent(graphResourceId, credential, 
       new UserIdentifier(userObjectID, UserIdentifierType.UniqueId)); 

のようなキャッシュでAuthenticationContextクラスを開始し、この次のとおりです。

AuthenticationContext authContext = new AuthenticationContext(authority); 
       ClientCredential credential = new ClientCredential(clientId, appKey); 

結果=はauthContext.AcquireTokenAsync(graphResourceIdを待ちます資格証明書)

これは、情報が欠落している短いトークンを返します。

MVCと組織アカウントのログインを使用してVS2013で新しいプロジェクトを作成し、グラフAPIを呼び出すと、この問題は簡単に複製できます。

VS2013のテンプレートプロジェクトを使用してグラフAPIを呼び出す方法が必要です。

+0

ADからどのような情報が必要ですか?このトークンを使用してグラフAPIを呼び出す必要があります – Thomas

+0

AADによる簡単な認証方法は、ユーザーのログイン名のみを返します。私たちのクライアントの1人は、自分のメールとは異なるログインをしています。私は彼らの電子メールを取得する必要があります。この情報を持つグラフから返される "mail"というパラメータがあります。 –

答えて

0

この問題についてマイクロソフトのサポート担当者に連絡し、解決策の概要を以下に示します。 VS2013から作成されたテンプレートは、認証にWSFederationライブラリを使用します。 Graph APIを呼び出すための簡単な方法はありません。これは、同じテンプレートがOpenIDライブラリを使用して認証してから、Graph APIを呼び出すことができるVS2015のMicrosoftによって修正されました。

関連する問題