AD FS を使用して Microsoft Entra 多要素認証を 認証プロバイダーとして構成する

この記事の情報は、Windows 2016 以降に適用されます。

組織が Microsoft Entra ID とフェデレーションされている場合、オンプレミスとクラウドの両方で、Microsoft Entra 多要素認証を使用して Active Directory フェデレーション サービス (AD FS) のリソースをセキュリティで保護できます。 Microsoft Entra 多要素認証を使用すると、パスワードがなくなり、認証方法がより安全になります。 AD FS では、Microsoft Entra 多要素認証をプライマリ認証として構成したり、追加の認証プロバイダーとして使用したりすることができます。

Windows Server 2012 R2 の AD FS の場合とは異なり、AD FS 2016 Microsoft Entra 多要素認証アダプターは Microsoft Entra ID と直接統合されており、オンプレミスの Azure Multi-Factor Authentication Server は必要ありません。 Windows Server 2016 には Microsoft Entra 多要素認証アダプターが組み込まれています。 他のインストールは必要ありません。

AD FS を使用してユーザーを Microsoft Entra 多要素認証に登録する

AD FS では、電話番号やモバイル アプリなどの Microsoft Entra 多要素認証のセキュリティ検証情報の、インラインの "プルーフアップ" 登録はサポートされていません。 インライン証明がサポートされていないため、ユーザーは Microsoft Entra 多要素認証を使用して AD FS アプリケーションの認証を行う前に、https://account.activedirectory.windowsazure.com/Proofup.aspx にアクセスしてプルーフアップされる必要があります。 Microsoft Entra ID でまだプルーフアップされていないユーザーが AD FS で Microsoft Entra 多要素認証による認証を行おうとすると、AD FS エラーが出ます。 AD FS の管理者は、このエラー エクスペリエンスをカスタマイズして、ユーザーをプルーフアップ ページに導くことができます。 このメッセージを作成するには、onload.js カスタマイズを使用して AD FS ページ内のエラー メッセージ文字列を検出します。 その後、新しいメッセージを表示して、ユーザーが https://aka.ms/mfasetup にアクセスし、認証を再試行するように誘導できます。 詳細については、「AD FS の Web ページをカスタマイズし、MFA 認証方法の登録を案内する」をご覧ください。

Note

この更新以前は、ユーザーは https://account.activedirectory.windowsazure.com/Proofup.aspx にアクセスし、登録において Microsoft Entra 多要素認証を使用することで認証を行う必要がありました。 今回の更新により、Microsoft Entra 多要素認証の検証情報をまだ登録していない AD FS ユーザーは、Windows 統合認証や AD FS Web ページでのユーザー名とパスワードなどのプライマリ認証のみで、ショートカット https://aka.ms/mfasetup を使用して Azure プルーフアップ ページにアクセスできるようになりました。 ユーザーに検証方法が構成されていない場合、Microsoft Entra ID ではインライン登録が実行されます。 ユーザーには、"追加のセキュリティ検証のため、このアカウントを設定するよう管理者が要求しました。" というメッセージが表示されます。そしてユーザーは [今すぐ設定] を選択します。少なくとも 1 つの検証方法が既に構成されているユーザーは、プルーフアップ ページにアクセスすると多要素認証 (MFA) を提供するように指示されます。

このセクションでは、Microsoft Entra 多要素認証を AD FS によるプライマリ認証方法および Office 365 の Microsoft Entra 多要素認証として使用する方法について説明します。

プライマリ認証としての Microsoft Entra 多要素認証

AD FS で Microsoft Entra 多要素認証をプライマリ認証として使用する大きな理由はいくつかあります。

  • Microsoft Entra ID、Office 365、およびその他の AD FS アプリへのサインインでパスワードを使用しなくて済みます。
  • パスワードの前に確認コードなどの別の要素を要求してパスワード ベースのサインインを保護します。

また、Microsoft Entra 多要素認証をプライマリ認証方法として使用したり、Microsoft Entra 条件付きアクセス (追加要素の要求による真の MFA など) を使用したりすることもできます。 オンプレミスで Microsoft Entra 多要素認証を使用するには、SupportsMfa$true に設定することで Microsoft Entra ドメイン設定を構成できます。 この構成では、Microsoft Entra ID によって AD FS に対し、追加の認証または "真の MFA" を必要とする条件付きアクセス シナリオでそれらの認証を実行するように求めることができます。

登録されていない (まだ MFA 検証情報を構成していない) AD FS ユーザーには、検証情報を構成するように求めるメッセージが表示されます。 登録していないユーザーにプロンプトを表示するには、カスタマイズされた AD FS エラー ページを使用して、ユーザーを https://aka.ms/mfasetup に誘導し、検証情報を構成させることができます。 構成後、ユーザーは AD FS サインインを再試行できます。

プライマリ認証としての Microsoft Entra 多要素認証は、1 つの要素と見なされます。 初期構成が完了すると、ユーザーは、Microsoft Entra ID での検証情報の管理や更新を行うため、または MFA を必要とする他のリソースにアクセスするために、追加の要素を提供する必要があります。

Note

AD FS 2019 では、Active Directory 要求プロバイダー信頼のアンカー要求の種類を変更し、これを windowsaccountname からユーザー プリンシパル名 (UPN) に変更する必要があります。 次の PowerShell コマンドレットを実行します。 これは、AD FS ファームの内部機能には影響しません。 この変更が行われると、一部のユーザーに資格情報の再入力を求めるメッセージが表示される場合があります。 再ログインしても、エンド ユーザーには何の変化もありません。

Set-AdfsClaimsProviderTrust -AnchorClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" -TargetName "Active Directory"

Office 365 に対する追加認証としての Microsoft Entra 多要素認証

AD FS 用の Microsoft Entra 多要素認証アダプターを使用すると、ユーザーは AD FS で MFA を行うことができます。 Microsoft Entra リソースをセキュリティで保護するには、条件付きアクセス ポリシーを使用して MFA を要求する必要があります。 また、ユーザーが 2 段階認証を正常に実行した場合は、SupportsMfa$true に設定し、multipleauthn 要求を出力する必要があります。

前述のとおり、登録されていない (まだ MFA 検証情報を構成していない) AD FS ユーザーには、検証情報を構成するように求めるメッセージが表示されます。 登録していないユーザーにプロンプトを表示するには、カスタマイズされた AD FS エラー ページを使用して、ユーザーを https://aka.ms/mfasetup に誘導し、検証情報を構成させることができます。 構成後、ユーザーは AD FS サインインを再試行できます。

前提条件

AD FS での認証に Microsoft Entra 多要素認証を使用する場合は、次の前提条件が必要です。

Note

Microsoft Entra ID と Microsoft Entra 多要素認証は、Microsoft Entra ID P1 または P2 および Enterprise Mobility Suite (EMS) に含まれています。 これらのアプリケーションのいずれかがインストールされている場合は、個々のサブスクリプションは必要ありません。

  • Windows Server 2016 AD FS のオンプレミス環境。
    • サーバーは、ポート 443 経由で次の URL と通信できる必要があります。
      • https://adnotifications.windowsazure.com
        • https://login.microsoftonline.com
  • オンプレミス環境は Microsoft Entra ID とフェデレーションされている必要があります。
  • Windows PowerShell 用 Microsoft Azure Active Directory モジュール
  • Azure AD PowerShell を使用して構成する Microsoft Entra ID インスタンスの全体管理者権限。
  • Microsoft Entra 多要素認証用に AD FS ファームを構成するためのエンタープライズ管理者認証情報。

Note

Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日時点で非推奨になります。 詳細については、非推奨の最新情報を参照してください。 この日以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正に限定されます。 これらの非推奨のモジュールは、2025 年 3 月 30 日まで引き続き機能します。

Microsoft Entra ID (旧称 Azure AD) を使用するには、Microsoft Graph PowerShell に移行することをお勧めします。 移行に関する一般的な質問については、「移行に関する FAQ」を参照してください。 注: MSOnline のバージョン 1.0.x では、2024 年 6 月 30 日以降に中断が発生する可能性があります。

AD FS サーバーを構成する

AD FS での Microsoft Entra 多要素認証の構成を完了するには、ここで説明する手順を使用して各 AD FS サーバーを構成する必要があります。

Note

必ず、ファーム内のすべての AD FS サーバーで、これらの手順が実行してください。 ファーム内に複数の AD FS サーバーがある場合、Azure AD PowerShell を使用して必要な構成をリモートで実行できます。

手順 1: 各 AD FS サーバーで Microsoft Entra 多要素認証の証明書を生成する

最初に行う必要があるのは、PowerShell コマンド New-AdfsAzureMfaTenantCertificate を使用して、Microsoft Entra 多要素認証で使用する証明書を生成することです。 証明書を生成したら、ローカル コンピューターの証明書ストアに格納されます。 証明書は、Microsoft Entra ディレクトリの TenantID を含むサブジェクト名でマークされます。

生成された証明書を示すローカル コンピューターの証明書ストアのスクリーンショット。

TenantID は Microsoft Entra ID ディレクトリの名前です。 新しい証明書を生成するには、次の PowerShell コマンドレットを使用します。

$certbase64 = New-AdfsAzureMfaTenantCertificate -TenantID <tenantID>

New-AdfsAzureMfaTenantCertificate からの出力が表示されている PowerShell ウィンドウのスクリーンショット。

手順 2: Azure 多要素認証クライアント サービス プリンシパルに新しい認証情報を追加する

AD FS サーバーが Azure 多要素認証クライアントと通信できるようにするには、Azure 多要素認証クライアントのサービス プリンシパルに認証情報を追加する必要があります。 New-AdfsAzureMFaTenantCertificate コマンドレットを使用して生成された証明書が、これらの資格情報として機能します。 PowerShell を開いて次の手順作を実行し、Azure 多要素認証クライアント サービス プリンシパルに新しい認証情報を追加します。

手順 3: Azure 多要素認証クライアントに対する新しい認証情報として証明書を設定する

Note

この手順を完了するには、Connect-MgGraph を使用して Microsoft Graph PowerShell で Microsoft Entra ID のインスタンスに接続する必要があります。 これらの手順では、PowerShell を使用して既に接続していることを前提とします。

Connect-MgGraph -Scopes 'Application.ReadWrite.All'
$servicePrincipalId = (Get-MgServicePrincipal -Filter "appid eq '981f26a1-7f43-403b-a875-f8b09b8cd720'").Id
$keyCredentials = (Get-MgServicePrincipal -Filter "appid eq '981f26a1-7f43-403b-a875-f8b09b8cd720'").KeyCredentials
$certX509 = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert]::FromBase64String($certBase64))
$newKey = @(@{
    CustomKeyIdentifier = $null
    DisplayName = $certX509.Subject
    EndDateTime = $null
    Key = $certX509.GetRawCertData()
    KeyId = [guid]::NewGuid()
    StartDateTime = $null
    Type = "AsymmetricX509Cert"
    Usage = "Verify"
    AdditionalProperties = $null
})
$keyCredentials += $newKey
Update-MgServicePrincipal -ServicePrincipalId $servicePrincipalId -KeyCredentials $keyCredentials

重要

このコマンドは、ファーム内のすべての AD FS サーバーで実行する必要があります。 Azure 多要素認証クライアントに対して証明書が新しい認証情報として設定されていないサーバーでは、Microsoft Entra 多要素認証は失敗します。

Note

981f26a1-7f43-403b-a875-f8b09b8cd720 は、Azure 多要素認証クライアントの GUID です。

AD FS ファームを構成する

各 AD FS サーバーで前のセクションの手順を完了したら、Set-AdfsAzureMfaTenant コマンドレットを使用して Azure テナント情報を設定します。 このコマンドレットは、AD FS ファームに対して 1 回だけ実行する必要があります。

PowerShell を開き、Set-AdfsAzureMfaTenant コマンドレットを使用して独自の tenantId を入力します。 Microsoft Azure Government クラウドを使用しているお客様には、-Environment USGov パラメーターを追加します。

注意

これらの変更を有効にするには、ファーム内の各サーバーで AD FS サービスを再起動する必要があります。 影響を最小限に抑えるには、各 AD FS サーバーを 1 つずつ NLB ローテーションから取り出し、すべての接続がドレインされるのを待ちます。

Set-AdfsAzureMfaTenant -TenantId <tenant ID> -ClientId 981f26a1-7f43-403b-a875-f8b09b8cd720

Set-AdfsAzureMfaTenant コマンドレットの実行後に受け取った警告メッセージを示す PowerShell ウィンドウのスクリーンショット。

最新のサービス パックを持たない Windows Server は、Set-AdfsAzureMfaTenant コマンドレットの -Environment パラメーターをサポートしていません。 Azure Government クラウドを使用していて、前の手順で、-Environment パラメーターが不足するために Azure テナントを構成できなかった場合は、次の手順を実行してレジストリ エントリを手動で作成します。 前のコマンドレットでテナント情報が正しく登録された場合、または Azure Government クラウドを使用していない場合は、この手順をスキップします。

  1. AD FS サーバーで レジストリ エディター を開きます。

  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ADFS に移動します。 次のレジストリ キー値を作成します。

    レジストリ キー
    SasUrl https://adnotifications.windowsazure.us/StrongAuthenticationService.svc/Connector
    StsUrl https://login.microsoftonline.us
    ResourceUri https://adnotifications.windowsazure.us/StrongAuthenticationService.svc/Connector
  3. これらの変更を反映するには、ファーム内の各サーバーで AD FS サービスを再起動する必要があります。 システムへの影響を最小限に抑えるには、各 AD FS サーバーを 1 つずつ NLB ローテーションから取り出し、すべての接続がドレインされるのを待ちます。

この手順が完了すると、Microsoft Entra 多要素認証が、イントラネットおよびエクストラネットで使用するためのプライマリ認証方法として使用できるようになったことが通知されます。

[エクストラネット] セクションと [イントラネット] セクションの両方で強調表示されている Microsoft Entra 多要素認証オプションを示す、[認証方法の編集] ダイアログ ボックスのスクリーンショット。

Microsoft Entra 多要素認証をセカンダリ認証方法として使用する場合は、[認証方法の編集] ボックスで、[多要素] タブ (AD FS 2019 では [追加] タブ) を選択して、有効であることを確認してください。 そうしないと、"有効である強力な認証方法が見つかりませんでした" などのエラー メッセージが表示される場合があります。 適切な強力な認証プロバイダーを構成して有効にするには、管理者に問い合わせてください。" などのエラー メッセージが表示される場合があります。

AD FS Microsoft Entra 多要素認証証明書を更新および管理する

次のガイダンスは、AD FS サーバー上で Microsoft Entra 多要素認証の証明書を管理するのに役立つようになっています。

既定では、Microsoft Entra 多要素認証を使用できるように AD FS を構成した場合、PowerShell コマンドレット New-AdfsAzureMfaTenantCertificate で生成された証明書は 2 年間有効です。 証明書の有効期限が近づいていることを確認し、証明書の更新と新しい証明書のインストールを行うには、以下の手順を使用します。

  1. AD FS Microsoft Entra 多要素認証証明書の有効期限を評価します。

    各 AD FS サーバーのローカル コンピューターの [マイ ストア] には、発行者とサブジェクトの領域に "Microsoft AD FS Microsoft Entra 多要素認証" を含む自己署名証明書があります。 この証明書が Microsoft Entra 多要素認証の証明書です。 有効期限を確認するには、各 AD FS サーバーでこの証明書の有効期間を調べます。

  2. 各 AD FS サーバーで新しい AD FS Microsoft Entra 多要素認証証明書を作成します。

    証明書の有効期限が近くなったら、各 AD FS サーバーで新しい Microsoft Entra 多要素認証証明書を生成して更新プロセスを開始します。 PowerShell で、次のコマンドレットを使用して、AD FS サーバーに新しい証明書を生成します。

    注意事項

    証明書の有効期限が既に切れている場合は、次のコマンドに -Renew $true パラメーターを追加しないでください。 このシナリオでは、既存の期限切れの証明書をそのままにして、追加の証明書を作成するのではなく、新しい証明書に置き換えます。

    $newcert = New-AdfsAzureMfaTenantCertificate -TenantId <tenant id such as contoso.onmicrosoft.com> -Renew $true
    

    証明書の有効期限が切れていない場合、コマンドによって、現在の日付の 2 日先から 2 年と 2 日間有効な新しい証明書が生成されます。 コマンドレットの実行中または証明書の更新中、AD FS と Microsoft Entra 多要素認証の操作は影響を受けません。 この 2 日間の遅延は意図的なもので、AD FS で Microsoft Entra 多要素認証に新しい証明書が使用され始める前に、テナントで新しい証明書を構成する次の手順に従うための猶予を与えています。

  3. Microsoft Entra テナントで新しい AD FS Microsoft Entra 多要素認証証明書を構成します。

    Note

    この手順を完了するには、Connect-MgGraph を使用して Microsoft Graph PowerShell で Microsoft Entra ID のインスタンスに接続する必要があります。 これらの手順では、PowerShell を使用して既に接続していることを前提とします。

    Connect-MgGraph -Scopes 'Application.ReadWrite.All'
    $servicePrincipalId = (Get-MgServicePrincipal -Filter "appid eq '981f26a1-7f43-403b-a875-f8b09b8cd720'").Id
    $keyCredentials = (Get-MgServicePrincipal -Filter "appid eq '981f26a1-7f43-403b-a875-f8b09b8cd720'").KeyCredentials
    $certX509 = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert]::FromBase64String($newcert))
    $newKey = @(@{
        CustomKeyIdentifier = $null
        DisplayName = $certX509.Subject
        EndDateTime = $null
        Key = $certX509.GetRawCertData()
        KeyId = [guid]::NewGuid()
        StartDateTime = $null
        Type = "AsymmetricX509Cert"
        Usage = "Verify"
        AdditionalProperties = $null
    })
    $keyCredentials += $newKey
    Update-MgServicePrincipal -ServicePrincipalId $servicePrincipalId -KeyCredentials $keyCredentials
    

    以前の証明書の有効期限が切れている場合は、AD FS サービスを再起動して新しい証明書を取得します。 証明書の有効期限が切れる前に更新した場合は、AD FSサービスを再起動する必要はありません。

  4. Microsoft Entra 多要素認証に新しい証明書が使用されていることを確認します。

新しい証明書が有効になると、AD FS はそれらを取得し、数時間から 1 日以内に Microsoft Entra 多要素認証の各証明書を使用します。 AD FS で新しい証明書が使用されると、各サーバーに、AD FS 管理イベント ログに記録されたイベントが表示されます。これには、次の情報が含まれます。

Log Name:      AD FS/Admin
Source:        AD FS
Date:          2/27/2018 7:33:31 PM
Event ID:      547
Task Category: None
Level:         Information
Keywords:      AD FS
User:          DOMAIN\adfssvc
Computer:      ADFS.domain.contoso.com
Description:
The tenant certificate for Azure MFA has been renewed.

TenantId: contoso.onmicrosoft.com.
Old thumbprint: 7CC103D60967318A11D8C51C289EF85214D9FC63.
Old expiration date: 9/15/2019 9:43:17 PM.
New thumbprint: 8110D7415744C9D4D5A4A6309499F7B48B5F3CCF.
New expiration date: 2/27/2020 2:16:07 AM.

AD FS の Web ページをカスタマイズし、MFA 認証方法の登録を案内する

以下の例を使用して、まだプルーフアップしていない (MFA 検証情報を構成していない) ユーザー向けに、AD FS の Web ページをカスタマイズします。

エラーを見つける

まず、ユーザーが検証情報を持たない場合、AD FS からいくつかの異なるエラー メッセージが返されます。 Microsoft Entra 多要素認証をプライマリ認証として使用している場合、プルーフアップされていないユーザーには、次のメッセージを含む AD FS エラー ページが表示されます。

    <div id="errorArea">
        <div id="openingMessage" class="groupMargin bigText">
            An error occurred
        </div>
        <div id="errorMessage" class="groupMargin">
            Authentication attempt failed. Select a different sign in option or close the web browser and sign in again. Contact your administrator for more information.
        </div>

Microsoft Entra ID を追加認証にしようとすると、プルーフアップされていないユーザーには、次のメッセージを含む AD FS エラー ページが表示されます。

<div id='mfaGreetingDescription' class='groupMargin'>For security reasons, we require additional information to verify your account (mahesh@jenfield.net)</div>
    <div id="errorArea">
        <div id="openingMessage" class="groupMargin bigText">
            An error occurred
        </div>
        <div id="errorMessage" class="groupMargin">
            The selected authentication method is not available for &#39;username@contoso.com&#39;. Choose another authentication method or contact your system administrator for details.
        </div>

エラーをキャッチし、ページ テキストを更新する

エラーをキャッチし、ユーザーにカスタム ガイダンスを表示するには、AD FS の Web テーマの一部である onload.js ファイルの末尾に JavaScript を追加します。 これにより、次のことが可能になります。

  • 識別エラー文字列を検索する。
  • カスタム Web コンテンツを提供する。

注意

onload.js ファイルをカスタマイズする方法に関する一般的なガイダンスについては、「AD FS サインイン ページの高度なカスタマイズ」をご覧ください。

次の手順は簡単な例を示しています。

  1. プライマリ AD FS サーバーで Windows PowerShell を開き、次のコマンドを実行して AD FS の新しい Web テーマを作成します。

        New-AdfsWebTheme –Name ProofUp –SourceName default
    
  2. フォルダーを作成し、AD FS の既定の Web テーマをエクスポートします。

       New-Item -Path 'C:\Theme' -ItemType Directory;Export-AdfsWebTheme –Name default –DirectoryPath C:\Theme
    
  3. C:\Theme\script\onload.js ファイルをテキスト エディターで開きます。

  4. onload.js ファイルの末尾に次のコードを追加します。

    //Custom Code
    //Customize MFA exception
    //Begin
    
    var domain_hint = "<YOUR_DOMAIN_NAME_HERE>";
    var mfaSecondFactorErr = "The selected authentication method is not available for";
    var mfaProofupMessage = "You will be automatically redirected in 5 seconds to set up your account for additional security verification. After you've completed the setup, please return to the application you are attempting to access.<br><br>If you are not redirected automatically, please click <a href='{0}'>here</a>."
    var authArea = document.getElementById("authArea");
    if (authArea) {
        var errorMessage = document.getElementById("errorMessage");
        if (errorMessage) {
            if (errorMessage.innerHTML.indexOf(mfaSecondFactorErr) >= 0) {
    
                //Hide the error message
                var openingMessage = document.getElementById("openingMessage");
                if (openingMessage) {
                    openingMessage.style.display = 'none'
                }
                var errorDetailsLink = document.getElementById("errorDetailsLink");
                if (errorDetailsLink) {
                    errorDetailsLink.style.display = 'none'
                }
    
                //Provide a message and redirect to Azure AD MFA Registration Url
                var mfaRegisterUrl = "https://account.activedirectory.windowsazure.com/proofup.aspx?proofup=1&whr=" + domain_hint;
                errorMessage.innerHTML = "<br>" + mfaProofupMessage.replace("{0}", mfaRegisterUrl);
                window.setTimeout(function () { window.location.href = mfaRegisterUrl; }, 5000);
            }
        }
    }
    
    //End Customize MFA Exception
    //End Custom Code
    

    重要

    ドメイン名を使用するには、"<YOUR_DOMAIN_NAME_HERE>" を変更する必要があります。 たとえば、var domain_hint = "contoso.com"; のように指定します。

  5. onload.js ファイルを保存します。

  6. 次の Windows PowerShell コマンドを入力して、onload.js ファイルをカスタム テーマにインポートします。

    Set-AdfsWebTheme -TargetName ProofUp -AdditionalFileResource @{Uri='/adfs/portal/script/onload.js';path="c:\theme\script\onload.js"}
    
  7. 次の Windows PowerShell コマンドを入力して、AD FS のカスタム Web テーマを適用します。

    Set-AdfsWebConfig -ActiveThemeName "ProofUp"