🔍

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

に公開

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

https://developer.microsoft.com/en-us/microsoft-365/blogs/net-standard-version-of-sharepoint-online-csom-apis?WT.mc_id=M365-MVP-5002941

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

.NET Standard 版の CSOM は単なる移植ではありません。これまでの .NET Framework 版と比べて大きな変更点があります。それは、ほぼ必ず利用されていたであろう SharePointOnlineCredentials クラスがなくなったという点です。SharePointOnlineCredentials クラスは WS-Security 認証を使用していましたが、これが廃止され、OAuth による認証に統一されました。ただし、それをサポートするクラスが用意されているわけではありません。開発者自身で ExecutingWebRequest イベントを利用して Authorization ヘッダーにアクセス トークンを設定する必要があります。

https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/using-csom-for-dotnet-standard?WT.mc_id=M365-MVP-5002941

上記の Microsoft のドキュメントでは AuthenticationManager クラスが紹介されていますが、アクセス トークンの取得には MSAL を利用するのが良いと思われます。いずれにせよ Password Credentials は非推奨ですので、使用しないことをおすすめします。対話式の場合は特に問題ありませんが、非対話式の場合はアプリのトークンを利用するかどうかなど、別の課題が発生します。

これまで簡単に記述できていた部分が急に難しくなってしまいましたので、特別な理由がない限り、当面は .NET Framework 版を利用するほうが簡単です。うっかり .NET Core でプロジェクトを作成して SharePointOnlineCredentials クラスが存在しないことに気付いて困ることがないようご注意ください。

Discussion