Microsoft Graph APIを利用する上でのハードル

構造
microsoft identity platform →(authorize) app → api gateway(microsoft graph) → data sources(entra,.365etc...in microsoft cloud)
認可方式の違い
ユーザーがサインインする場合(delegated access):OAuth 2.0 authorization code flow
ユーザーを必要としない場合(app-only access):OAuth 2.0 client credentials flow
OAuthに対する理解
必ずユーザーの同意が必要そうだが、それだとapp-only accessはどうやって実現するのか?
詳細な理解
別テナントのアカウントのデータを取得してくるには、delegated accessを裏側で行うしかない?
そもそも裏側だけではユーザーの同意は得られない(テナントの設定をしてもらえればできるが、個人用アカウントは不可能)なので、delegated permissionで実装する必要あり
一度同意したアクセストークンやhomeAccountIDを裏側で保持しておけば、下記のようにアクセストークンの更新ができるかも??
こっち?
サポートしているアカウントの種類
・シングルテナント
・マルチテナント
・個人用アカウント
→各テナントでアプリケーションを信頼することを管理者が許可する必要がある??
確かに、「コチームを許可しますか?」というダイアログでたな
バックエンド内でクライアントを新しく作っているが、そうではなくフロント側で生成したアクセストークンを渡してそのまま利用する形にする必要がある?
多分前者だと許可が新しく必要になってしまう
個人用だと自分が許可すれば良いが、マルチテナントかつ管理者アカウントではない場合、管理者に要求するフローを作る必要がある
マルチテナントの場合、クライアントにコチームを登録してもらう必要あり??
環境変数で今固定値を設けているが、認証情報を組織ごとにDBに保存してもらって、それを利用する方法になる気がする→Latticeは実装してないので、なくてもできる?
ただ、ここを見るとクライアント側の同意が必要に見える
別のテナントからサインイン検証をする必要がある
フロント→バックエンドの流れで処理していたら、アクセストークンをそのまま渡せば良いが、バックエンドだけだったらできない??
ユーザーが信頼したという確認を取らせる必要があるのか?
「サポート」としか書かれていなくて、サインインのみできるというのは分からない

ライブラリごとの使い分け
トークンの受け渡しはできているのか?
更新はどうやって行う?(必要ある?)
とりあえずそのイベントを取得した時のアクセストークンをDB側に保持して、アクセスさせるで乗り切れるかも
更新ができれば
手動ではできない可能性が高い
適切なクライアントを作れれば、毎回ユーザーの同意を受けなくてもリクエストはできる?
@azure/identity:認証認可を通して、アクセストークンを取得。azureリソース全般で統一された資格情報モデルを利用
@azure/msal-**: 認証認可を通して、アクセストークンを取得。oauth2.0の各種フローを直接取り扱っており、より柔軟・詳細にトークン管理が可能
microsoft-graph-client: Graph APIの呼び出しのみ

ログイン・ログアウトの方式がリダイレクト制になってしまう

ゼロトラスト
entraで実現できるよ!というだけで、気にしなくても開発はできそう
一種のセキュリティ設計

変更内容をアプリケーションに反映させたい
- Delta Query + 定期ポーリング
- Webhook + Subscription

OAuthに対する理解

各サービスの関係性
microsoft identify platform
msal
テナント
アプリケーション
属しているユーザー
トークン
refresh token

その他資料