はじめに
Officeアドインを開発時に気を付けなければいけない地雷まとめの「Officeのログイン者情報を、Officeアドインで取得することはできない」にも書いたのですが、Officeアドインの安定版では現在、「Officeにログインしているユーザー」を取得することはできません。
どう考えても取れそうな「佐藤 裕」という情報が、残念ながら取得は出来ないのです。安定版では。
そのため、もし「Officeアドインで、Office365のユーザー情報を取得してゴニョゴニョする」というアプリを検討していたとしても、ユーザーに再度ログインを強要する必要があります。
これがクライアント版のOfficeならまだ良いのですが、Online版まで考えると本当に地獄。
アプリがiframeで実装されているがゆえに、認証できず、dialogを表示する必要が出てしまいます。
※これもOfficeアドインを開発時に気を付けなければいけない地雷まとめの「認証が絡む場合、Office Onlineには本当に注意」を参照
しかし、これがPreviewでは、一部できるようになります!
Office系、それもAzure AD v2でのログインに限り、SSOとして、Officeのアプリにログインしている情報(正確にはアクセストークン)を取得できるようになるわけです。
そのため、ユーザーはわざわざ2回目のログインを行う必要がなくなるわけですね。
今回は、この「Office アドインのシングル サインオン」の概要をご紹介します。
検証はまだなので、触りのみとなってしまうことをご了承ください。
概要
基本的にはこちらの公式サイトをご参照ください。
https://docs.microsoft.com/ja-jp/office/dev/add-ins/develop/sso-in-office-add-ins
キーポイントをかいつまんで解説します。
流れ
※引用:https://docs.microsoft.com/ja-jp/office/dev/add-ins/develop/sso-in-office-add-ins
ざっくり流れをまとめると、以下のとおりです。
-
Officeアプリ(各開発者が開発するWebアプリ)内のjsファイルで、getAccessTokenAsync関数を実行する
-
getAccessTokenAsync内の処理で、Officeプログラム(ExcelやWordの本体)に、現在ログインしているユーザー情報を取得するよう要求する
-
Officeプログラムにログインしていない場合、ログインするようユーザーに要求するダイアログを表示する
-
Officeプログラムは、Azure AD v2エンドポイントから、現在のユーザーのアドイン トークンを取得する
-
Officeプログラムから、getAccessTokenAsync関数の処理として、Officeアプリに、アドイントークンを返却する
→アドイントークン(JWT)を解析して、ログインユーザーのメールアドレスなどを取得する
ユーザー情報などを取得するのみであれば、ここまでで処理は終了なのですが、Microsoft Graphなども絡める場合、以下の処理も必要になります。
-
Officeアプリから、サーバーサイドにアドイントークンを送信する
-
サーバーサイドで、Microsoft Graphなどで使用できるアクセストークンを取得し、Officeアプリに返却する
このような処理になります。
注意点
ここからは、現在分かっている注意点を記載します。やはり地雷は多し。
Office Insiderに参加が必要
2019/05/21現在、プレビュー版のみ対応であるため、「Office Insider」に参加する必要があります。
参加した上で、プレビュー版のOfficeをインストールする必要があります。
Office2013や2016には非対応
これがとっても大事ですね。
SSOは「IdentityAPI」という要件セットが必要で、これはOffice2013や2016は非対応です。恐らく今後も。
なので、このSSOを対応させるのであれば、2013や2016を切り捨てる必要がありますね。
サーバーサイドの実装が必要
これは実際のサンプルコードで実装した時に解説予定なのですが、Microsoft Graphなどのトークンを活用したい場合には、サーバーサイドの実装が必要になります。
通常のhtmlとjavascriptだけのアプリを開発しよう!と思っても、それはNGなんですね。vueとかReactとかも多分NG。
今回取得できるトークンは、あくまでも「アドイントークン」で、Microsoft Graphのアクセストークンではありません。
Microsoft Graphのアクセストークンを取得する際には、別途サーバーサイドの処理が必要、ということを覚えておいてください。
まとめ
このように、どうしても限定的な範囲にはなってしまいますので、これはOfficeストアのような全体公開向けのアプリではなく、組織内でのアプリの方が向いているかもしれないですね。
また、現在はプレビュー版なので、いずれにせよ正式版に採用は難しいです。
それでもメリットは十分にあります。Office365前提のアプリであれば、非常に便利な機能になることは間違いないです。
実装の検証と、具体的な解説は次回行う予定です。ぜひお待ちください。
コメントを残す