ユーザーの予定表イベントを読み取るために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
を:OutlookServicesClient
:HttpClient
を使用して
OutlookServicesClient wat = new OutlookServicesClient(baseUrl, async() => token);
var messages = await wat.Me.Messages.ExecuteAsync();
と手動の方法。 2つの異なるリソースを試しました:ロールを含まない短いトークンを返した認証ボットのhttps://graph.windows.net/
。役割を持つより長いトークンを返す手動のメソッドの場合はhttps://outlook.office365.com/
です。