CData Software Blog

クラウド連携のCData Software の技術ブログです。

SharePoint Online に SOAP API(Web Service)で接続する際の注意点:CData SharePoint Driver

f:id:sugimomoto:20210714093816p:plain

こんにちは。CData Software Japanリードエンジニアの杉本です。

今までこのBlogでも、ExchangeやDynamics 365(CRM)Driverのトピックとして、Office365関連での認証方法の切り替えを紹介してきました。

www.cdatablog.jp

www.cdatablog.jp

すでに、Graph API などに切り替えている方であれば、あまり気にならないものですが、以前からのSOAP APIなどレガシーなエンドポイントを利用したアプリの場合、エンドポイントとしては存在していても、レガシー認証部分がブロックされている可能性があるため、基本的には先進認証(ADAL)および最新のAPIへの切り替えが必要となっています。

というわけで今回は SharePoint を対象として、SOAP APIを利用した場合に遭遇する事象、および先進認証・REST APIを利用するタイプに切り替える方法を紹介したいと思います。

www.cdata.com

f:id:sugimomoto:20210714093250p:plain

CData SharePoint Driverの対応状況について

まず、CData SharePoint Driverの対応状況について確認しておきましょう。

CData SharePoint Driverは前述の「SOAP API」「REST API」の接続もサポートしています。

少しややこしいんですが、SharePoint には3種類のAPIが現在存在しており、CData Driverが利用しているのは「SOAP API (Web Service)」「REST APIREST API V1)」の2つです。

以下にサービスの種類と対応している認証方法についてまとめてみました。

APIの種類 認証方法 備考
SOAP API (Web Service)?redirectedfrom=MSDN) レガシー認証
REST API(REST API V1) 先進認証(OAuth)
Graph API(REST API V2) 先進認証(OAuth)

この「SOAP API (Web Service)」「REST APIREST API V1)」では利用できる機能やリソースのデザインが大きく異なるため、データモデルを2種類に分けて提供しています。

cdn.cdata.com

f:id:sugimomoto:20210714093259p:plain

これは、「Schema」というプロパティで切り替えることができるようになっており、デフォルトでは「SOAP」が選択されています。

※「なぜデフォルトが最新のRESTではなくSOAPなのか?」と言いますと、これは既存のユーザーがDriver アップデート時に勝手にRESTに切り替わらないようにしているためです。

cdn.cdata.com

f:id:sugimomoto:20210714093306p:plain

最新の環境で SharePoint SOAP APIを利用するには?

さて、前述の通り SOAP APIではレガシー認証が施されており、この認証方法がテナントの設定で利用できない状態になっている可能性があります。

基本的には REST APIへの切り替えを推奨しますが、検証用途やREST APIに切り替えるまでの措置として、一時的にSOAP APIにつなぎたいこともあるかと思うので、ここではレガシー認証を利用できるようにするための設定(ブロックしている設定箇所)を確認してみたいと思います。

SharePoint側の設定

まず、一つ目はSharePoint側の設定です。

SharePoint 管理センターにある「アクセスの制御」の設定で、「先進認証を使用していないアプリ」、つまるところ「レガシー認証を利用しているアプリ」が「アクセスをブロックする」になっている場合は、接続時にエラーになります。

f:id:sugimomoto:20210714093314p:plain

ちなみここでブロックされている場合に CData Driverが出力するエラーメッセージは以下のとおりです。

Cannot extract required information from IDCRL header. Header=, IdcrlType=, ServicePolicy=, ServiceTarget=, Endpoint=

Azure AD側の設定

もう一つはAzure AD側の設定です。

以下のページで解説されているように、レガシー認証をブロックするの設定、ポリシーによってコントロールできます。

docs.microsoft.com

docs.microsoft.com

ちなみにAzure ADの「プロパティ」設定にある「セキュリティの既定値郡の有効化」でも全体的に設定されている場合もあるかと思います。(最新のトライアルなどを取得すると、この設定がデフォルトで有効化されていますね)

f:id:sugimomoto:20210714093322p:plain

このAzure AD側でのブロックが働いている場合のエラーメッセージは以下の通りとなります。SharePoint側のアクセスブロックとエラーメッセージが異なるので注意してください。

Unrecognized response when getting SharePoint online security cookies, please check your credentials.

SharePoint REST API での接続方法

上記で紹介してきたように、SharePoint管理センターやAzure AD側の設定レベルなので、1エンドユーザーが会社のテナントの設定を変えようとするのは、なかなか厳しいものかなと思います。

ですので、基本的にはREST APIでの接続を利用するのが良いでしょう。(もちろんオンプレミス場合はまた話が別ですが)

というわけで最後にREST APIでの接続方法を解説したいと思います。

www.cdata.com

今回はCData SharePoint JDBC Driverを例に上げていますが、ODBCADO.NETでも共通です。

REST APIで接続するために必要なプロパティは以下の4種類です。ここで認証方式(AuthScheme)でOAuth、Schemaで「REST」を選ぶのがポイントです。

プロパティ名 備考
AuthScehem OAuth
URL 例)https://XXXX.sharepoint.com/ 任意のSharePoint Site URLを指定します。
SharePoint Edition SharePoint Online
InitiateOAuth GETANDREFRESH OAuthのAccessTokenの取得方式を設定します。
Schema REST デフォルトがSOAPなので、RESTに変更します。

f:id:sugimomoto:20210714093330p:plain

設定後、「接続テスト」をクリックすると、ブラウザが立ち上がり対象のアカウントへのログイン、アクセス許可が行えます。

f:id:sugimomoto:20210714093335p:plain

これで接続が完了します。

おわりに

ここまで述べたように基本的にはREST APIによる接続が推奨されます。

もしどうしてもSOAP APIを検証したい、といった場合は上記の設定を見直してみてください。

その他、接続する際に気になることがあれば、お気軽にテクニカルサポートまでお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx