からめもぶろぐ。

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

.NET Standard に対応した CSOM で注意するべき点について

少し前の話題になってしまいますが、ついに CSOM が .NET Standard 2.0 に対応したとアナウンスがありました。

developer.microsoft.com

.NET Standard 1.0 がリリースされたのが 2016 年、.NET Standard 2.0 がリリースされたのが 2017 年ということなので、対応にかなり時間がかかったことになります。

.NET Standard 版の CSOM は単なる移植ではありません。これまでの .NET Framework 版と比べて大きな変更があります。それはほぼ必ずお世話になっていたであろう SharePointOnlineCredentials クラスがなくなってしまったという点です。SharePointOnlineCredentials クラスは SPOIDCTL という Cookie ベースの認証を使っていました。これが廃止され、OAuth による認証に統一されました。といっても、それをサポートするクラスがあるわけではなく、自前で ExecutingWebRequest イベントで Authorization ヘッダーに Access Token を詰め込んでね、ということのようです。

docs.microsoft.com

上記の docs では AuthenticationManager というクラスが紹介されていますが、Access Token の取得は MSAL を使うのがいいと思います。いずれにせよ Password Credentials は非推奨なので使わないほうがいいでしょう。対話式ならば特に問題ありませんが非対話式だとアプリのトークンを使うかみたいな話になってそれはそれで困りますね。

これまでサクッと書けていたところが途端に難しくなってしまったので、よほど .NET Standard 版を使いたい理由があるのでなければ、当面は .NET Framework 版を使ったほうが簡単です。うっかり .NET Core でプロジェクトを作ってしまって SharePointOnlineCredentials クラスがなくて頭を抱えることがないことを祈ります。