そのため、OAuth2 経由で Outlook にログインし、アプリにアクセス トークンと更新トークンを提供することができます。
ただし、提供された更新トークンを使用して Outlook OAuth2 から別のトークンを取得する方法がわかりません。C# HttpClient() を使用して何かを機能させようとして、このコードを何度もいじりました。さらに、私はこの記事に従って、「ネイティブ」の「Experimental.IdentityModel.Clients.ActiveDirectory」ライブラリ (とにかくこれは何ですか?) を使用してタスクを達成しようとしました。
このライブラリにログインしてアクセス コードを取得することはできましたが、更新トークンは取得できませんでした。この特定のライブラリは、応答でトークンが提供されていても、リフレッシュ トークンへのアクセスを提供していないようです。
とにかく、アクセス トークンを取得するために使用している HttpClient コードは次のとおりです (これはコールバック コントローラー メソッドからのものです)。
string authCode = Request.Params["code"];
var client = new HttpClient();
var clientId = ConfigurationManager.AppSettings["ida:ClientID"];
var clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
var parameters = new Dictionary<string, string>
{
{"client_id", clientId},
{"client_secret", clientSecret},
{"code",authCode },
{"redirect_uri", Url.Action("Authorize", "Manage", null, Request.Url.Scheme)},
{"grant_type","authorization_code" }
};
var content = new FormUrlEncodedContent(parameters);
var response = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/v2.0/token",content);
var tokens = await response.Content.ReadAsAsync<MicrosoftOAuthAuthenticationModel>();
var originalRefreshToken = tokens.refresh_token;
var originalAccessToken = tokens.access_token;
originalAccessToken は期待どおりに生成されます。今ここに私が理解できない部分があります:
var parameters2 = new Dictionary<string, string>
{
{"grant_type", "refresh_token"},
{"refresh_token", originalRefreshToken},
{"client_id", clientId},
{"client_secret", clientSecret},
{"resource","https://outlook.office365.com" }
};
var content2 = new FormUrlEncodedContent(parameters2);
var response2 = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/token", content2);
var tokens2 = await response2.Content.ReadAsAsync<MicrosoftOAuthAuthenticationModel>();
var newRefreshtoken = tokens2.refresh_token;
var newAccessToken = tokens2.access_token;
サーバーから「認証に失敗しました: リフレッシュ トークンの形式が正しくないか無効です」という 400 エラーが表示されます。応答から文字通り更新トークンを取得して使用しているため、これは奇妙に思えます。
誰にも役立つ情報はありますか?または、誰に連絡すればよいか知っている人はいますか? 最後に、ここでの目標は、API を介して Office 365 の受信トレイからメールを永続的に読み取ることができるようにすることです。これにより、メール ID、会話 ID、件名、コンテンツ、メール アドレスなどを取得して処理できます。これを行う簡単な方法はありますか?これは、難しいことや珍しいことではありません。