皆さんこんにちは。国井です。
先日、Microsoft MVPを受賞させていただきました。これで2006年から11年連続での受賞になります。本当に感謝の気持ちでいっぱいです。
さて、今日はお客様からのご質問をいただくことが多い、ADALを利用した先進認証(Modern Authentication)について、私のところで調べてみたことをまとめたいと思います。
ADALってなに?
Active Directory Authentication Libraryの略で、乱暴な言い方をするなら、ブラウザーでのADFSを利用した認証方法と同じ認証方法をネイティブアプリケーションでも利用できるようにするための機能、といったところです。
このあたりはMVPふじえさんのブログに関連情報が掲載されているので、合わせてごらんください。
Office2013 Windowsクライアントが多要素認証とSAML IdPサポート
http://idmlab.eidentity.jp/2014/11/office2013-windowssaml-idp.html
[Office Preview]Outlook等の多要素認証サポート
http://idmlab.eidentity.jp/2015/03/office-previewoutlook.html
先進認証(Modern Authentication)とは?
Office 365の公式ブログでも紹介しているように、Office 2013 (Office 365 ProPlus) では、これまでOfficeアプリケーションからOffice 365への認証にはMicrosoft Online Servicesサインインアシスタントを利用しており、ADFSサーバーを利用したシングルサインオン環境では、ブラウザーとは異なる認証プロセス(つまりWS-Fedのパッシブプロファイルではないってことです)になっていました。そのことが原因で、Officeアプリケーションで多要素認証が利用できない、といった問題がありました。だからこそ、Office 365(Azure AD)でOfficeアプリケーションを利用するときだけ多要素認証を使わなくてもよいようなパスワード=アプリケーションパスワードなんてものがあったわけです。
Office 2013とOffice 2016のでは新しく先進認証をサポートし、Officeアプリケーションからの認証でADFSサーバーが絡む場合でも、ブラウザーのときと同じようにアクセスできるというのです。
では、どのように実現するか、必要な要素と設定を見てみましょう。
Office 2016 での先進認証
最近はOffice 365 ProPlusもOffice 2016バージョンで提供されるので、最近Office365を導入された方はOffice2016を利用していることも多いと思います。
Office 2016ではデフォルトで先進認証を利用するため(MSさんのサイト「Office 2013 クライアント アプリと Office 2016 クライアント アプリでの先進認証のしくみ」で詳しく解説しています)、特別な設定は必要ありません。と言いたいのですが、Exchange OnlineとSkype for Business Onlineではデフォルトで無効になっているので、有効化操作が必要です。
(2016年8月2日追記 Skype for Business Onlineでの有効化設定はこちら)
Exchange Onlineでは、以下のWindows Powershell用Azure Active Directoryモジュールを起動し、以下のコマンドレットを実行します。
$UserCredential = Get-Credential
Connect-MsolService –Credential $UserCredential$UserCredential$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic –AllowRedirection
Import-PSSession $Session
Set-OrganizationConfig -OAuth2ClientProfileEnabled:$true
これで出来上がり。
実際にOutlookを起動し、プロファイルを作成してみましょう。すると、見た目には何も変わらないように思えますが、
[次へ]をクリックすると、パスワード入力することなく終了します。そう、先進認証によってブラウザーによるシングルサインオンと同じ動きになり、パスワード入力が必要なくなっているのです。
ADFSサーバーのログを見ると、Outlookアプリケーションによるトークン発行時には、x-ms-endpoint-absolute-pathクレームに/adfs/services/trust/2005/usernamemixedではなく、ブラウザーアクセスの時と同じ/adfs/ls/wiaが割り当てられていることが分かります。
その他、タスクトレイのOutlookアイコンをCtrl+右クリックし、[接続状態]をクリックすると、[認証]欄に「べアラー」と表示されていることが分かります。べアラーとは、ベアラートークンのことです。
Office 2013 での先進認証
Office 2013 の場合、デフォルトで先進認証が利用できるわけではないので、先進認証を利用するために以下のレジストリ設定が必要です。(直近では、どのレジストリを必ず設定する必要があるのか、わかりませんが、少なくともEnableADALの設定は絶対必要です)
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Identity\EnableADAL (REG_DWORD) 値:1
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Identity\Version (REG_DWORD) 値:1
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Debug\TCOTrace (REG_DWORD) 値:3
以上により、先進認証によりOffice 2016と同様にブラウザーと同じような認証ができるようになります。ここでは、Wordでのサインインで多要素認証が利用できる様子を確認しておきましょう。ドメイン参加しているコンピューターでWordを起動すると、最初からユーザー名がOfficeアプリケーションに関連付けられるため、サインインで明示的にユーザー名を指定する必要はありません。しかし、ADFSサーバー(またはAzure AD)側で多要素認証が有効になっていると、ご覧のようにサインインエラーになります。
そこで、ファイルメニューから[アカウント]をクリックして、サインアウト→サインインの順でユーザー名を指定すると、
パスワード入力の画面は表示されずに多要素認証の実行が始まります。
多要素認証が完了すると、Wordが使えるようになりました。
■ ■ ■
最後になりますが、このあたりの検証を行うときは、イベントビューアでログを追いかけながら見ていくと、いつの時点でADFSサーバーでのトークン発行が行われたか?それが先進認証で行われているか?などを追跡できますし、この操作方法を覚えておくとトラブルシューティングなどにも活用できるようになります。
具体的なトラブルシューティング手法については、私が開催している「Office365とクラウドサービスの認証ベストプラクティスコース」でも実践していただくことができますので、ご興味がありましたら、ご参加いただければ幸いです。
■そのほか参考情報
Office 2013 modern authentication public preview announced
https://blogs.office.com/2015/03/23/office-2013-modern-authentication-public-preview-announced/
Office 2013 updated authentication enabling Multi-Factor Authentication and SAML identity providers
https://blogs.office.com/2014/11/12/office-2013-updated-authentication-enabling-multi-factor-authentication-saml-identity-providers/
AD FS を運用している組織の Office 2013 モダン認証によるサインイン問題のトラブルシューティング
https://support.microsoft.com/ja-jp/kb/3052203#bookmark-_issue2
Office 2013 with ADAL not working with Single Sign-On
https://goodworkaround.com/2015/4/16/office-2013-with-adal-not-working-with-single-sign-on/