2017-08-17 16 views
0

MS Graphを使用しているMSALを使用しているアプリケーションがあり、APIを使用できました。 https://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations#GetRoomListsなどのいくつかのOutlook APIがあり、現在FindRoomListsはグラフで利用できません。Microsoft Graph APIとOutlook APIを単一のアプリケーションで使用する

私は、これらのAPIを両方とも1つのアプリケーションで使用する必要がありますか? Stack Overflowについても同様の質問がありますが、グラフとOutlookの両方でトークンを使用することはできません。私は試してもうまくいかなかった。

提案がありますか?グラフを使用して終了し、Outlook APIに行く私のパスですか?

答えて

0

MSALはキャッシュを検索し、要件に一致するキャッシュされたトークンを返します。このようなアクセストークンが期限切れになっているか、適切なアクセストークンが存在しないが、関連付けられたリフレッシュトークン(有効範囲がoffline_access必要)がある場合、MSALはそれを自動的に使用して新しいアクセストークンを取得し、

は、Microsoftのグラフのためのアクセストークンに認証コードを償還するMSALを使用した場合、OpenIDのでowinミドルウェアを接続します

   AuthorizationCodeReceived = async (context) => 
       { 
        var code = context.Code; 
        string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value; 
        TokenCache userTokenCache = new MSALSessionCache(signedInUserID, 
         context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase).GetMsalCacheInstance();        
        ConfidentialClientApplication cca = 
         new ConfidentialClientApplication(clientId, redirectUri, new ClientCredential(appKey), userTokenCache,null); 
        string[] scopes = { "Mail.Read" }; 
        try 
        { 
         AuthenticationResult result = await cca.AcquireTokenByAuthorizationCodeAsync(code, scopes); 
        } 
        catch (Exception eee) 
        { 

        } 
       }, 

範囲Mail.Readでは、Microsoftグラフのためのアクセストークンを得ることができますあなたがコントローラ/アクションでoutlookメールの残りAPIを呼び出す場合は、スコープ:https://outlook.office.com/mail.readを使用することができます。キャッシュされた最新表示トークンを使用してOutlookメールの残りのAPIのトークンを取得します。

  // try to get token silently 
      string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value; 
      TokenCache userTokenCache = new MSALSessionCache(signedInUserID, this.HttpContext).GetMsalCacheInstance();    
      ConfidentialClientApplication cca = new ConfidentialClientApplication(clientId, redirectUri,new ClientCredential(appKey), userTokenCache, null); 
      if (cca.Users.Count() > 0) 
      { 
       string[] scopes = { "https://outlook.office.com/mail.read" }; 
       try 
       { 
        AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes,cca.Users.First()); 
       } 
       catch (MsalUiRequiredException) 
       { 
        try 
        {// when failing, manufacture the URL and assign it 
         string authReqUrl = await WebApp.Utils.OAuth2RequestManager.GenerateAuthorizationRequestUrl(scopes, cca, this.HttpContext, Url); 
         ViewBag.AuthorizationRequest = authReqUrl; 
        } 
        catch (Exception ee) 
        { 

        } 
       } 
      } 
      else 
      { 

      } 

コードサンプル:Integrate Microsoft identity and the Microsoft Graph into a web application using OpenID Connectを参照してください。

+0

これを実行して検証していただきありがとうございます。私のものはUWPアプリです。 –

関連する問題