2015-04-30 88 views
0

到目前爲止,我有這個。辦公室365休息Api有問題獲取訪問令牌

 public static async Task<OutlookServicesClient> CreateOutlookClientAsync(string capability) 
 
     { 
 
      try 
 
      { 
 

 
       string authority = CommonAuthority; 
 

 
       // Create an AuthenticationContext using this authority. 
 
       _authenticationContext = new AuthenticationContext(authority); 
 

 
       //See the Discovery Service Sample (https://github.com/OfficeDev/Office365-Discovery-Service-Sample) 
 
       //for an approach that improves performance by storing the discovery service information in a cache. 
 
       DiscoveryClient discoveryClient = new DiscoveryClient(
 
        async() => await GetTokenHelperAsync(_authenticationContext, DiscoveryResourceId)); 
 

 
       // Get the specified capability ("Contacts"). 
 
       CapabilityDiscoveryResult result = 
 
        await discoveryClient.DiscoverCapabilityAsync(capability); 
 
       var client = new OutlookServicesClient(
 
        result.ServiceEndpointUri, 
 
        async() => 
 
         await GetTokenHelperAsync(_authenticationContext, result.ServiceResourceId)); 
 
       return client; 
 
      } 
 
      catch (Exception e) 
 
      { 
 
       Console.WriteLine(e.Message); 
 
       if (_authenticationContext != null && _authenticationContext.TokenCache != null) 
 
        _authenticationContext.TokenCache.Clear(); 
 
       return null; 
 
      } 
 
     } 
 

 
    }

private static async Task<string> GetTokenHelperAsync(AuthenticationContext context, string resourceId) 
 
     { 
 
      string accessToken = null; 
 
      AuthenticationResult result = null; 
 
      string myId = WebConfigurationManager.AppSettings["ida:ClientID"]; 
 
      string myKey = WebConfigurationManager.AppSettings["ida:Password"]; 
 
      ClientCredential client = new ClientCredential(myId,myKey); 
 
      
 
      result = await context.AcquireTokenAsync(resourceId, client); 
 
      //result =context.AcquireToken(resourceId, ClientID,_returnUri); 
 
      accessToken = result.AccessToken; 
 

 

 
      return accessToken; 
 
     }

,當我到達導致兩件事情發生,如果我的用戶AcquireTokenAsync我得到一個錯誤,說明與標識XXXX應用程序目錄未找到api.office.com否則,如果我運行AcquireToken我得到登錄模式彈出,但發生錯誤指示請求必須包含client_secret。

我不知道如何解決這個問題我懷疑它可能與實際的應用程序配置有關我已經嘗試在Azure AD中創建我自己的應用程序並使用VS連接服務,有任何其他人遇到類似問題是什麼?

回答

1

根據您所看到的錯誤,您的應用註冊方式似乎存在問題。第一個錯誤通常發生在未將應用程序標記爲多租戶時,並且您以與註冊應用程序的租戶不同的租戶的身份登錄到應用程序。

第二個錯誤是奇怪的。客戶端祕密是您正在讀取ida:Password元素並傳入ClientCredential對象的內容。

我昨天剛剛放了一個.NET tutorial,通過設置這些東西。仔細觀察一下,看看是否有助於您暢通無阻。

+0

謝謝傑森。我用你的教程來獲得一個認證令牌,但現在我得到一個空引用異常來自mscorlib.dll – Frank

+0

感謝傑森的教程!我使用了O365 Unified API :)現在我已經將它與我的MVC應用程序集成在一起了! –