2017-07-11 18 views
0

ユーザーの予定表イベントを読み取るためにOffice 365 APIにアクセスしようとしています。これは、ライブラリAuthBotを持つChat Bot(MS Bot Framework)の内部で発生します。 ログイン処理後、アクセストークンはcontext.GetAccessToken("https://graph.windows.net")で返すことができます。 有効なトークンが返されるため、これは動作するようです。Outlook API 401権限がありません

次は、Office365からリソースをリクエストしようとしましたが、ほとんどすべての試みが401になりました。 Azure ADでは、アプリケーションはExchangeグループOffice 365のすべてのアクセス許可にアクセスできます。

私はapi.office.com/discovery/v1.0で発見APIにアクセスしようとすると、それは要求が401にならない唯一の時間です:

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("https://api.office.com/discovery/v1.0"); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
    using (var response = await client.GetAsync("me")) 
    using (var content = response.Content) 
    { 
     var result = await content.ReadAsStringAsync(); 
    } 
} 

返される何がそのI後、この

<?xml version=\"1.0\" encoding=\"utf-8\"?> 
<service xml:base=\"https://api.office.com/discovery/me/\" 
    xmlns=\"http://www.w3.org/2007/app\" 
    xmlns:atom=\"http://www.w3.org/2005/Atom\"> 
<workspace> 
    <atom:title type=\"text\">Default</atom:title> 
    <collection href=\"allservices\"> 
     <atom:title type=\"text\">allservices</atom:title> 
    </collection> 
    <collection href=\"services\"> 
     <atom:title type=\"text\">services</atom:title> 
    </collection> 
</workspace> 
</service> 

です2つの方法でいくつかの情報にアクセスしようとしました。

AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/"+ ConfigurationManager.AppSettings["AAD.Tenant"]); 
     AuthenticationResult authenticationResult = await auth.AcquireTokenAsync(
      "https://outlook.office365.com/", 
      new ClientCredential(ConfigurationManager.AppSettings["AAD.ClientId"], ConfigurationManager.AppSettings["AAD.ClientSecret"]) 
      ); 
     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken); 
     HttpResponseMessage msg = await client.GetAsync("https://outlook.office365.com/api/v1.0/me/events"); 

どちらのリターン401を:OutlookServicesClientHttpClientを使用して

OutlookServicesClient wat = new OutlookServicesClient(baseUrl, async() => token); 
var messages = await wat.Me.Messages.ExecuteAsync(); 

と手動の方法。 2つの異なるリソースを試しました:ロールを含まない短いトークンを返した認証ボットのhttps://graph.windows.net/。役割を持つより長いトークンを返す手動のメソッドの場合はhttps://outlook.office365.com/です。

答えて

0

私はちょうどそれを考え出した:

https://graph.windows.netはまだ私のOutlook365テナントによってサポートされていない新しいバージョンのようです。従って、401。 authbotのhttps://outlook.office365.comに切り替えると、正しい結果(カレンダーとイベント)が返されました。

マニュアルモードの場合、https://login.windwos.netはグラフとは別のドメインで、互換性がないとします。

サイドノート:outlook.office365.comを使用して、私は最初に404を得ました。これは、ユーザーが受信ボックスを持たないテストに使用されたためです。

関連する問題