からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

Microsoft Graph Toolkit の Teams MSAL2 Provider について

Microsoft Graph Toolkit にはいくつかのプロバイダーがあって SharePoint や Microsoft Teams などのいくつかのシナリオでは最適化されているのですが、Microsoft Teams 用のプロバイダーはシングル サインオンに対応しておらず正直イケていませんでした。ところが最近になって Teams MSAL2 Provider というのができてシングル サインオンにも対応したらしいです。ただし肝心のトークン交換のところは「サンプル コードを見てね」と書いてあるのにリンク先には一切の記載がないという。*1 仕方ないのでコードを見てみます。

github.com

トークン交換のところを抜き出すとこんな感じです。

response = await fetch(url.href, {
  method: 'POST',
  headers: {
    Content-Type': 'application/json',
    authorization: `Bearer ${clientToken}`
  },
  body: JSON.stringify({
    scopes: scopes,
    clientid: this.clientId
  }),
  mode: 'cors',
  cache: 'default'
});

const data = await response.json().catch(this.unhandledFetchError);

...

return data.access_token;

うーん、なんか独自の実装になっていて TeamsFx の SimpleAuth と連携しているわけではなさそうです。

github.com

こういうところはちゃんとやってほしいなあと思っていたら Issue と Pull Request が上がっていました。next/teamsfx ブランチに入っているので近い将来リリースされると思われます。

github.com

これはかなり便利になりそうですね!

*1:よくあることですね