C#: ASP.NET Core MVCのアプリでOneDriveのOAuthを使う

 ASP.NET Core MVCアプリでOneDriveのAPIを使いたいので、OAuthでトークンを取ってくるという使い始めの部分までをまとめる。

 まずアプリをOneDriveのDevCenterに登録する。
https://apps.dev.microsoft.com/

 サインインするとその先の登録アプリ一覧画面の右上にアプリ追加がある。



 必要情報の入力と取得。ClienIDとClientSecret(PasswordとPrivateKeyがあるがPasswordのほう)、入力したリダイレクトURIをメモ。認証コード取得時にリダイレクトURIも渡さないといけないのだが、それが間違っているとコードが降りてこない。


 DevCenterへのアプリ登録ができたらあとはC#コード。OneDriveでアプリの仕様を許諾して認証コードを持って帰ってきたユーザの処理。
[Route("OAuth")]

public async Task<string> AuthUserAsync()
{
var client_id = xxx;
var redirect_uri = xxx;
var client_secret = xxx;
var code = Request.Query["code"];

var httpClient = new System.Net.Http.HttpClient();

// まず持って帰ってきた認証コードを使ってトークンを取得する
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "client_id", client_id },
// ↓スラッシュとか入ってるだろうけどエスケープせずに入れてOK
{ "redirect_uri", redirect_uri },
{ "client_secret", client_secret },
{ "code", code },
{ "grant_type", "authorization_code" },
});
var codeResponse = await httpClient.PostAsync("https://login.live.com/oauth20_token.srf", content);
var codeResponseBody = await codeResponse.Content.ReadAsStringAsync();
var jsonObj = JsonConvert.DeserializeObject<Dictionary<string, string>>(codeResponseBody);
var token = jsonObj["access_token"];

// 取得したトークンを使ってOneDriveにユーザ情報を要求する
var uri = $"https://api.onedrive.com/v1.0/drive?access_token={token}";
var tokenResponse = await httpClient.GetAsync(uri);
var tokenResponseBody = await tokenResponse.Content.ReadAsStringAsync();

// ユーザを確認できる情報が得られたのでごにょごにょする
// Foo(tokenResponseBody);

// return tokenResponseBody;

}
comment: 0