こんにちは。CData Software Japanリードエンジニアの杉本です。
今までこのBlogでも、ExchangeやDynamics 365(CRM)Driverのトピックとして、Office365関連での認証方法の切り替えを紹介してきました。
すでに、Graph API などに切り替えている方であれば、あまり気にならないものですが、以前からのSOAP APIなどレガシーなエンドポイントを利用したアプリの場合、エンドポイントとしては存在していても、レガシー認証部分がブロックされている可能性があるため、基本的には先進認証(ADAL)および最新のAPIへの切り替えが必要となっています。
というわけで今回は SharePoint を対象として、SOAP APIを利用した場合に遭遇する事象、および先進認証・REST APIを利用するタイプに切り替える方法を紹介したいと思います。
CData SharePoint Driverの対応状況について
まず、CData SharePoint Driverの対応状況について確認しておきましょう。
CData SharePoint Driverは前述の「SOAP API」「REST API」の接続もサポートしています。
少しややこしいんですが、SharePoint には3種類のAPIが現在存在しており、CData Driverが利用しているのは「SOAP API (Web Service)」「REST API(REST 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 API(REST API V1)」では利用できる機能やリソースのデザインが大きく異なるため、データモデルを2種類に分けて提供しています。
これは、「Schema」というプロパティで切り替えることができるようになっており、デフォルトでは「SOAP」が選択されています。
※「なぜデフォルトが最新のRESTではなくSOAPなのか?」と言いますと、これは既存のユーザーがDriver アップデート時に勝手にRESTに切り替わらないようにしているためです。
最新の環境で SharePoint SOAP APIを利用するには?
さて、前述の通り SOAP APIではレガシー認証が施されており、この認証方法がテナントの設定で利用できない状態になっている可能性があります。
基本的には REST APIへの切り替えを推奨しますが、検証用途やREST APIに切り替えるまでの措置として、一時的にSOAP APIにつなぎたいこともあるかと思うので、ここではレガシー認証を利用できるようにするための設定(ブロックしている設定箇所)を確認してみたいと思います。
SharePoint側の設定
まず、一つ目はSharePoint側の設定です。
SharePoint 管理センターにある「アクセスの制御」の設定で、「先進認証を使用していないアプリ」、つまるところ「レガシー認証を利用しているアプリ」が「アクセスをブロックする」になっている場合は、接続時にエラーになります。
ちなみここでブロックされている場合に CData Driverが出力するエラーメッセージは以下のとおりです。
Cannot extract required information from IDCRL header. Header=, IdcrlType=, ServicePolicy=, ServiceTarget=, Endpoint=
Azure AD側の設定
もう一つはAzure AD側の設定です。
以下のページで解説されているように、レガシー認証をブロックするの設定、ポリシーによってコントロールできます。
ちなみにAzure ADの「プロパティ」設定にある「セキュリティの既定値郡の有効化」でも全体的に設定されている場合もあるかと思います。(最新のトライアルなどを取得すると、この設定がデフォルトで有効化されていますね)
この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での接続方法を解説したいと思います。
今回はCData SharePoint JDBC Driverを例に上げていますが、ODBCやADO.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に変更します。 |
設定後、「接続テスト」をクリックすると、ブラウザが立ち上がり対象のアカウントへのログイン、アクセス許可が行えます。
これで接続が完了します。
おわりに
ここまで述べたように基本的にはREST APIによる接続が推奨されます。
もしどうしてもSOAP APIを検証したい、といった場合は上記の設定を見直してみてください。
その他、接続する際に気になることがあれば、お気軽にテクニカルサポートまでお問い合わせください。