皆さんこんにちは。国井です。
ユーザー名/パスワードとは別に、電話やモバイルアプリなどを使って認証を行う多要素認証。
多要素認証にはユーザー名/パスワードが悪用された時の備えとして役立つとされていますが、ユーザーさんには「面倒」と煙たがられます。
特にADFSを使って、Office 365 (Azure AD)にシングルサインオンしている環境だと、ADFSの多要素認証と、Azure ADの多要素認証があって、両方設定してしまった日には、設定した瞬間から苦情が殺到します。
そこで、今日はADFSで多要素認証を設定した場合には、Azure ADで多要素認証を設定しても、回避される方法を紹介します。
■ ■ ■
まず、手始めにADFSサーバーで証明書認証を有効にします。
ADFSサーバーでの証明書認証の設定方法そのものはこちらで紹介しているので、参考にしてください。
次に、Azure ADでも多要素認証を有効にします。
Azure ADの多要素認証設定はOffice 365の管理ポータル、またはMicrosoft Azureのポータルから設定できます。
設定したら、早速Office 365にシングルサインオンしてみます。
すると、一瞬だけADFSの多要素認証画面が表示され(証明書認証なので、自動的に認証は完了する)、その後、下の画面のように、Azure ADで多要素認証を初めて実行するときの画面が表示されます。
つまり、ADFSとAzure ADの両方で多要素認証が実行されてしまっていることがわかります。
ここからがポイントですが、
ADFSサーバーで認証されたユーザーがAzure ADの多要素認証を実行しないようにするには、
ADFSサーバーでクレームルールを設定します。
ADFS管理ツールの[証明書利用者信頼]から[Microsoft Office 365 Identity Platform]を右クリックし、[要求規則の編集]をクリックして、[発行変換規則]タブから規則を追加し、[カスタム規則を使用して要求を送信]をクリックして、以下のルールを作成します。
(1行で書いてください)
=>issue(Type=”http://schemas.microsoft.com/claims/authnmethodsrefe
rences”,Value=”http://schemas.microsoft.com/claims/multipleau
thn”);
下の画面のように設定できたら、[完了]をクリックして、保存しておきましょう。
これで再チャレンジします。すると、Azure ADの多要素認証画面が表示されることなく、Office 365にサインインできたことになります。
しかし、ここで大きな問題が。
このクレームルール、ADFSサーバーで多要素認証を行っているか、いないかに関わりなく、Azure ADの多要素認証を回避してしまいます。
せめて、ADFSサーバーの多要素認証だけ実行させたい、という場合はクレームルールに「ADFSサーバーで多要素認証を実行した場合」という条件を書きましょう。
どうやって書くか?
色々やり方はあると思いますが、私が着目したのは証明書を利用して多要素認証を実行した場合、http://schemas.microsoft.com/2012/12/certificatecontext/ekuクレームに値を設定する点です。
つまり、ekuクレームがトークンに含まれる場合はAzure ADの多要素認証を回避せよ!というクレームルールを書けばよいので、
Exists([Type==“http://schemas.microsoft.com/2012/12/certificatecont
ext/eku”])
=>issue(Type=”http://schemas.microsoft.com/claims/authnmethodsrefe
rences”,Value=”http://schemas.microsoft.com/claims/multipleau
thn”);
このクレームルールを保存して、もう一度、Office 365へのシングルサインオンを試してみると、ADFSサーバーで多要素認証を実行したPCだけがAzure ADの多要素認証を回避して、シングルサインオンに成功します。
【参考情報】
Securing cloud resources with Azure Multi-Factor Authentication and AD FS
https://github.com/Azure/azure-content/blob/master/articles/multi-factor-authentication/multi-factor-authentication-get-started-adfs-cloud.md
Azure MFAをADFSサーバーで利用する方法
https://azure.microsoft.com/ja-jp/documentation/articles/active-directory-conditional-access-azuread-connected-apps/