Office Web Apps で SharePoint上のファイルが開けなくなる (SPWOPIProofKey が更新されないことによる)
こんにちは SharePoint サポートの森 健吾 (kenmori) です。
今回の投稿では、ネットワーク構成によっては、SharePoint 上に保存されたファイルを Office Web Apps (WAC) で開けなくなる可能性について紹介します。
現象 : 突然 Office Web Apps で SharePoint ファイルを開こうとするとエラーが表示され、ファイルが閲覧・編集できなくなった。
エラー : 構成に問題があるため、ドキュメントを取得できません。可能な場合は、このドキュメントを Microsoft Word で開いてみてください。
上記のエラーは下記のような状況にて発生することが予測されます。
・何らかのシステム構成変更から約 1 カ月後にファイルが Office Web Apps でファイルが開けなくなった。
・しばらく停止していた WAC サーバーを起動させるとこの問題が発生した。
原因 : SharePoint ファームから Office Web Apps に対して、定期的に実行している公開キーの更新処理が実施されていない
この現象発生時に、診断ログを見ると、下記のようなログが記録されています。
このことから、SharePoint と Office Web Apps 間で OAuth 認証に使用すると署名の暗号化キーが更新されていないことに起因することが確認できます。
dd/MM/yyyy hh:mm:ss.ff w3wp.exe (0x1234) 0x5678 SharePoint Foundation WOPI ag7pj Unexpected WOPI (CheckFile) - Invalid Proof Signature for file myfile.xlsx
ここでいう署名や暗号化などは一体何を指しているのでしょうか。下記に簡単にご説明します。
OAuth を使用した資格情報の受け渡し
SharePoint Server のバージョン 2013 から Office Web Apps は SharePoint 製品から分離され別製品となりました。
Office Web Apps は、別製品である SharePoint にログインしているユーザーの資格情報を受け取り、SharePoint からファイルを取得する必要が生じます。
これを可能にしているのが OAuth です。OAuth を使用することで、信頼されたシステム間において、資格情報を暗号化して受け渡しすることができます。
上図は、簡単な HTTP フローです。SharePoint は、現在のユーザー資格情報を暗号化して、Office Web Apps に POST させるよう要求します (1 – 3)。Office Web Apps は、受け取った資格情報を復号化し、それを使用して SharePoint からファイルを取得 (4 – 5) し、ドキュメント ビューをクライアントに返します (6)。
信頼関係 (= 署名) の更新
SharePoint と Office Web Apps 間の信頼関係には署名が使用されていますが、この署名の暗号化公開キーは定期的に更新される必要があります。
Office Web Apps が返す公開キーの有効期限は 28 日に設定されており、既定の設定では、SharePoint の WOPI Discovery の同期タイマージョブによって、ファーム内の任意のサーバーが 30 分間隔で実行されており、WOPI アプリケーション (Office Web Apps) へ公開キーの取得処理を行っています。この公開キーは、SharePoint の構成データベースに格納されて、随時更新されております。
このWOPI Discovery の同期タイマ ジョブが実行されていない場合や、失敗し続けた場合は、SharePoint Server と Office Web Apps の信頼関係を保つことができなくなることから、ファイルを開くことができなくなります。
事例紹介
上記のとおり、WOPI Discovery の同期タイマ ジョブは、SharePoint の他のファーム単位で動作するジョブと同様に、ファーム内の任意のサーバーで動作します。そのため、アプリケーション サーバーの役割を持つサーバーなど、一部のサーバーが Office Web Apps に直接ネットワーク アクセスできない場合、今回の現象が発生する可能性が報告されております。
最初に記載しておきますが、下記の構成は一般的な構成の 1 つですので、この構成自体に問題があるわけではありません。
WOPI Discovery の同期タイマ ジョブのように、ファームで 1 度だけ実行される種類のタイマージョブは、指定された時間に到達した際に、最初に手を挙げたサーバーが実行する形となります。
毎回別サーバーになりそうに思えますが、1 つのサーバーに固まることがあります。その結果、上図のように APP serverなど、ネットワーク上 Office Web Apps サーバーに接続できないサーバーで処理が実行され続けることがあります。
下記の診断ログのように 30 分に 1 回公開キーの更新処理が失敗し、もし、これが28 日間続くと現象発生に至ります。
dd/MM/yyyy hh:mm:ss.ff OWSTIMER.EXE (0x1234) 0x5678 SharePoint Foundation WOPI agnu4 Monitorable LoadDiscoveryXMLFromAddress getting HTTP response failed
dd/MM/yyyy hh:mm:ss.ff OWSTIMER.EXE (0x1234) 0x5678 SharePoint Foundation WOPI aifai Medium LoadDiscoveryXMLFromAddress: End [result=NoWebResponse, elapsed time (ms)=20000]
dd/MM/yyyy hh:mm:ss.ff OWSTIMER.EXE (0x1234) 0x5678 SharePoint Foundation WOPI ag7oz Monitorable Rerunning WOPI Discovery Failure: Could not load new WOPI Proof Keys for server wac.contoso.com against Discovery Endpoint
もちろん、 28 日間の間に 1 度でも更新されるように 30 分に 1 回という高頻度で公開キーの更新を実施しているのですが、上記の状況が発生する可能性があることは認識しておく必要があります。
対処策
この問題の対処策として、下記の方法があります。
・Office Web Apps サーバーに接続できるサーバー (例. WFE) で一時または定期的に Update-SPWOPIProofKey コマンド レットを実行する
・ネットワーク構成を変更して、SharePoint のすべてのサーバーを Office Web Apps サーバーに疎通できるようにする。
タイトル : Update-SPWOPIProofKey
アドレス : https://technet.microsoft.com/en-us/library/jj219460.aspx
是非とも、ご使用の環境が、この問題に直面する可能性の有無について検討いただき、問題発生を事前に防いでいただけますと幸いです。
今回の投稿は以上になります。