C# 學習筆記(五): OneDrive API 串接(OAuth 流程串接篇)

Tom
appxtech

--

嗨嗨大家好,本篇的內容要介紹 Microsoft OAuth 流程的串接方式。

要想取得使用者的 OneDrive 控制權限,就必須透過 OAuth 取得使用者的 Access Token,並且保證這個 Token 有 OneDrive 的存取權。

Nuget Package 安裝

  • Microsoft.Graph
dotnet add package Microsoft.Graph --version 5.44.0
  • Microsoft.Identity.Client
dotnet add package Microsoft.Identity.Client --version 4.59.0

新增檔案

這邊準備

  • appsettings.json : 將前一篇申請到的 ClientId & ClientSecret 替換進檔案中。
  • AppSettings.cs
  • OneDriveController.cs
  • OneDriveService.cs
  • Program.cs
    我的 DI 使用 Autofac 來做,若各位有其他習慣的方法都一樣可以。

Microsoft OAuth 用戶端取得授權流程

Microsoft OAuth 用戶端認證流程圖

1. 取得 OAuth URI

第一步,將 Microsoft OAuth URI 進行組合,將必要的資訊都帶進去,包含 ClientId、Scopes,Redirect URI和 state 字串(有需要的話)。

可以把這個連結貼到瀏覽器上試試看能不能正常運行。

2. 新增 API 接收 Microsoft 回傳的 Authorization Code 並轉為 Access Token

在 Controller 新增一支 API,這個 api path 就是上一篇設定的 Redirect URI,還沒設定好的人記得去補上設定。

Microsoft 會把 code 放在 query parameter 中帶進來,若有 state 字串也會一起進來,拿到 code 後就是要把它轉成真正可用的 Access Token。

加好了之後,再用 Auth URI 測試一次,看所有流程跑完成不能正常取回 Access Token。

有看到這些回傳內容就沒問題了。

4. 使用 Refresh Token 來更新過期的 Access Token

Micosoft OAuth 用戶端更新 Access Token 不需要舊的 access token,只需要 對應的 refresh token 即可。

5. [補充]Decode Id Token

Id Token 本身是 JWT (JSON Web Token),所以可以直接 照著 Decode JWT 的方式取得其中資訊。

//使用方法 : 帶入 Id Token & 欲取得欄位名稱
var email = GoogleService.DecodeIdToken(idToken, "email");

--

--

Tom
appxtech
Writer for

Major in Computer Science, Web Backend Engineer