Open9

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

MAROMARO

構造
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に対する理解
https://www.tdk.com/ja/tech-mag/knowledge/147#:~:text=OAuthとは、複数の,連動ができるのです。

必ずユーザーの同意が必要そうだが、それだとapp-only accessはどうやって実現するのか?
https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

https://qiita.com/TakahikoKawasaki/items/63ed4a9d8d6e5109e401
https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f

詳細な理解
https://qiita.com/TakahikoKawasaki/items/f2a0d25a4f05790b3baa

別テナントのアカウントのデータを取得してくるには、delegated accessを裏側で行うしかない?
そもそも裏側だけではユーザーの同意は得られない(テナントの設定をしてもらえればできるが、個人用アカウントは不可能)なので、delegated permissionで実装する必要あり

一度同意したアクセストークンやhomeAccountIDを裏側で保持しておけば、下記のようにアクセストークンの更新ができるかも??
https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-node-samples/refresh-token
こっち?
https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-node-samples/on-behalf-of

MAROMARO

サポートしているアカウントの種類
・シングルテナント
・マルチテナント
・個人用アカウント

→各テナントでアプリケーションを信頼することを管理者が許可する必要がある??
確かに、「コチームを許可しますか?」というダイアログでたな
バックエンド内でクライアントを新しく作っているが、そうではなくフロント側で生成したアクセストークンを渡してそのまま利用する形にする必要がある?
多分前者だと許可が新しく必要になってしまう
個人用だと自分が許可すれば良いが、マルチテナントかつ管理者アカウントではない場合、管理者に要求するフローを作る必要がある

マルチテナントの場合、クライアントにコチームを登録してもらう必要あり??
環境変数で今固定値を設けているが、認証情報を組織ごとにDBに保存してもらって、それを利用する方法になる気がする→Latticeは実装してないので、なくてもできる?
ただ、ここを見るとクライアント側の同意が必要に見える
https://learn.microsoft.com/en-us/graph/users-you-can-reach
別のテナントからサインイン検証をする必要がある

フロント→バックエンドの流れで処理していたら、アクセストークンをそのまま渡せば良いが、バックエンドだけだったらできない??
ユーザーが信頼したという確認を取らせる必要があるのか?

「サポート」としか書かれていなくて、サインインのみできるというのは分からない
https://docs.azure.cn/en-us/entra/identity-platform/supported-accounts-validation

MAROMARO

ライブラリごとの使い分け
トークンの受け渡しはできているのか?
更新はどうやって行う?(必要ある?)

とりあえずそのイベントを取得した時のアクセストークンをDB側に保持して、アクセスさせるで乗り切れるかも
更新ができれば

手動ではできない可能性が高い
適切なクライアントを作れれば、毎回ユーザーの同意を受けなくてもリクエストはできる?

@azure/identity:認証認可を通して、アクセストークンを取得。azureリソース全般で統一された資格情報モデルを利用
https://www.npmjs.com/package/@azure/identity

@azure/msal-**: 認証認可を通して、アクセストークンを取得。oauth2.0の各種フローを直接取り扱っており、より柔軟・詳細にトークン管理が可能
https://www.npmjs.com/package/@azure/msal-node

microsoft-graph-client: Graph APIの呼び出しのみ
https://www.npmjs.com/package/@microsoft/microsoft-graph-client

MAROMARO

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

MAROMARO

変更内容をアプリケーションに反映させたい

  1. Delta Query + 定期ポーリング
  2. Webhook + Subscription