Bagikan melalui


Membangun Metode Autentikasi Kustom untuk Layanan Federasi Direktori Aktif di Windows Server

Panduan ini menyediakan instruksi untuk menerapkan metode autentikasi kustom untuk Layanan Federasi Direktori Aktif di Windows Server 2012 R2. Untuk informasi selengkapnya, lihat Metode Autentikasi Tambahan.

Peringatan

Contoh yang dapat Anda bangun di sini hanya untuk tujuan pendidikan.  Instruksi ini adalah untuk implementasi paling sederhana dan paling minimal yang mungkin untuk mengekspos elemen model yang diperlukan.  Tidak ada back end autentikasi, pemrosesan kesalahan, atau data konfigurasi.

Menyiapkan kotak pengembangan

Panduan ini menggunakan Visual Studio 2012. Proyek dapat dibangun menggunakan lingkungan pengembangan apa pun yang dapat membuat kelas .NET untuk Windows. Proyek harus menargetkan .NET 4.5 karena metode BeginAuthentication dan TryEndAuthentication menggunakan jenis System.Security.Claims.Claim, bagian dari .NET Framework versi 4.5. Ada satu referensi yang diperlukan untuk proyek:

Dll referensi Tempat menemukannya Diperlukan untuk
Microsoft.IdentityServer.Web.dll Dll terletak di %windir%\ADFS pada server Windows Server 2012 R2 tempat LAYANAN Federasi Direktori Aktif telah diinstal.

Dll ini harus disalin ke mesin pengembangan dan referensi eksplisit yang dibuat dalam proyek.

Jenis antarmuka termasuk IAuthenticationContext, IProofData

Membuat penyedia

  1. Di Visual Studio 2012: Pilih File-Proyek> Baru>...

  2. Pilih Pustaka Kelas dan pastikan Anda menargetkan .NET 4.5.

    Screenshot of the New Project dialog box showing the Class Library option selected.

  3. Buat salinan Microsoft.IdentityServer.Web.dll dari %windir%\ADFS di server Windows Server 2012 R2 tempat Layanan Federasi Direktori Aktif telah diinstal dan tempelkan di folder Proyek anda di komputer pengembangan Anda.

  4. Di Penjelajah Solusi, klik kanan Referensi dan Tambahkan Referensi...

  5. Telusuri salinan lokal Microsoft.IdentityServer.Web.dll Anda dan Tambahkan...

  6. Klik OK untuk mengonfirmasi referensi baru:

    Screenshot of the Reference Manager dialog box showing the Microsoft.IdentityServer.Web.dll selected.

    Anda sekarang harus disiapkan untuk menyelesaikan semua jenis yang diperlukan untuk penyedia.

  7. Tambahkan kelas baru ke proyek Anda (Klik kanan proyek Anda, Tambahkan... Kelas...) dan beri nama seperti MyAdapter, yang ditunjukkan di bawah ini:

    Screenshot of the Add New Item dialog box with the Class option selected.

  8. Dalam file baru MyAdapter.cs, ganti kode yang ada dengan yang berikut ini:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Globalization;
    using System.IO;
    using System.Net;
    using System.Xml.Serialization;
    using Microsoft.IdentityServer.Web.Authentication.External;
    using Claim = System.Security.Claims.Claim;
    
    namespace MFAadapter
    {
        class MyAdapter : IAuthenticationAdapter
        {
            public IAuthenticationAdapterMetadata Metadata
            {
                //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            }
    
            public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
            {
                return true; //its all available for now
            }
    
            public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
            {
                //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
            }
    
            public void OnAuthenticationPipelineUnload()
            {
    
            }
    
            public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
        }
    }
    
  9. Kami belum siap untuk membangun... ada dua antarmuka lagi untuk digunakan.

    Tambahkan dua kelas lagi ke proyek Anda: satu untuk metadata, dan satu lagi untuk formulir presentasi. Anda dapat menambahkan ini dalam file yang sama dengan kelas di atas.

    class MyMetadata : IAuthenticationAdapterMetadata
    {
    
    }
    
    class MyPresentationForm : IAdapterPresentationForm
    {
    
    }
    
  10. Selanjutnya, Anda dapat menambahkan anggota yang diperlukan untuk masing-masing anggota. Pertama, metadata (dengan komentar sebaris yang bermanfaat)

    class MyMetadata : IAuthenticationAdapterMetadata
    {
        //Returns the name of the provider that will be shown in the AD FS management UI (not visible to end users)
        public string AdminName
        {
            get { return "My Example MFA Adapter"; }
        }
    
        //Returns an array of strings containing URIs indicating the set of authentication methods implemented by the adapter 
        /// AD FS requires that, if authentication is successful, the method actually employed will be returned by the
        /// final call to TryEndAuthentication(). If no authentication method is returned, or the method returned is not
        /// one of the methods listed in this property, the authentication attempt will fail.
        public virtual string[] AuthenticationMethods 
        {
            get { return new[] { "http://example.com/myauthenticationmethod1", "http://example.com/myauthenticationmethod2" }; }
        }
    
        /// Returns an array indicating which languages are supported by the provider. AD FS uses this information
        /// to determine the best language\locale to display to the user.
        public int[] AvailableLcids
        {
            get
            {
                return new[] { new CultureInfo("en-us").LCID, new CultureInfo("fr").LCID};
            }
        }
    
        /// Returns a Dictionary containing the set of localized friendly names of the provider, indexed by lcid. 
        /// These Friendly Names are displayed in the "choice page" offered to the user when there is more than 
        /// one secondary authentication provider available.
        public Dictionary<int, string> FriendlyNames
        {
            get
            {
                Dictionary<int, string> _friendlyNames = new Dictionary<int, string>();
                _friendlyNames.Add(new CultureInfo("en-us").LCID, "Friendly name of My Example MFA Adapter for end users (en)");
                _friendlyNames.Add(new CultureInfo("fr").LCID, "Friendly name translated to fr locale");
                return _friendlyNames;
            }
        }
    
        /// Returns a Dictionary containing the set of localized descriptions (hover over help) of the provider, indexed by lcid. 
        /// These descriptions are displayed in the "choice page" offered to the user when there is more than one 
        /// secondary authentication provider available.
        public Dictionary<int, string> Descriptions
        {
            get 
            {
                Dictionary<int, string> _descriptions = new Dictionary<int, string>();
                _descriptions.Add(new CultureInfo("en-us").LCID, "Description of My Example MFA Adapter for end users (en)");
                _descriptions.Add(new CultureInfo("fr").LCID, "Description translated to fr locale");
                return _descriptions; 
            }
        }
    
        /// Returns an array indicating the type of claim that the adapter uses to identify the user being authenticated.
        /// Note that although the property is an array, only the first element is currently used.
        /// MUST BE ONE OF THE FOLLOWING
        /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"
        /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
        /// "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
        /// "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"
        public string[] IdentityClaims
        {
            get { return new[] { "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" }; }
        }
    
        //All external providers must return a value of "true" for this property.
        public bool RequiresIdentity
        {
            get { return true; }
        }
    }
    

    Sekarang Anda harus dapat F12 (klik kanan - Buka Definisi) pada IAuthenticationAdapter untuk melihat kumpulan anggota antarmuka yang diperlukan.

    Selanjutnya, Anda dapat melakukan implementasi ini.

  11. Ganti seluruh konten kelas Anda dengan yang berikut ini:

    namespace MFAadapter
    {
        class MyAdapter : IAuthenticationAdapter
        {
            public IAuthenticationAdapterMetadata Metadata
            {
                //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            }
    
            public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
            {
                return true; //its all available for now
            }
    
            public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
            {
                //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
            }
    
            public void OnAuthenticationPipelineUnload()
            {
    
            }
    
            public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
    
            public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
            {
                //return new instance of IAdapterPresentationForm derived class
            }
        }
    }
    

    Selanjutnya, formulir presentasi:

    class MyPresentationForm : IAdapterPresentationForm
    {
        /// Returns the HTML Form fragment that contains the adapter user interface. This data will be included in the web page that is presented
        /// to the cient.
        public string GetFormHtml(int lcid)
        {
            string htmlTemplate = Resources.FormPageHtml; //todo we will implement this
            return htmlTemplate;
        }
    
        /// Return any external resources, ie references to libraries etc., that should be included in
        /// the HEAD section of the presentation form html.
        public string GetFormPreRenderHtml(int lcid)
        {
            return null;
        }
    
        //returns the title string for the web page which presents the HTML form content to the end user
        public string GetPageTitle(int lcid)
        {
            return "MFA Adapter";
        }
    }
    
  12. Perhatikan 'todo' untuk elemen Resources.FormPageHtml di atas. Anda dapat memperbaikinya dalam satu menit, tetapi pertama-tama mari kita tambahkan pernyataan pengembalian akhir yang diperlukan, berdasarkan jenis yang baru diimplementasikan, ke kelas MyAdapter awal Anda. Untuk melakukan ini, tambahkan hal berikut ke implementasi IAuthenticationAdapter yang ada:

    class MyAdapter : IAuthenticationAdapter
    {
        public IAuthenticationAdapterMetadata Metadata
        {
            //get { return new <instance of IAuthenticationAdapterMetadata derived class>; }
            get { return new MyMetadata(); }
        }
    
        public IAdapterPresentation BeginAuthentication(Claim identityClaim, HttpListenerRequest request, IAuthenticationContext authContext)
        {
            //return new instance of IAdapterPresentationForm derived class
            return new MyPresentationForm();
        }
    
        public bool IsAvailableForUser(Claim identityClaim, IAuthenticationContext authContext)
        {
            return true; //its all available for now
        }
    
        public void OnAuthenticationPipelineLoad(IAuthenticationMethodConfigData configData)
        {
            //this is where AD FS passes us the config data, if such data was supplied at registration of the adapter
        }
    
        public void OnAuthenticationPipelineUnload()
        {
    
        }
    
        public IAdapterPresentation OnError(HttpListenerRequest request, ExternalAuthenticationException ex)
        {
            //return new instance of IAdapterPresentationForm derived class
            return new MyPresentationForm();
        }
    
        public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
        {
            //return new instance of IAdapterPresentationForm derived class
            outgoingClaims = new Claim[0];
            return new MyPresentationForm();
        }
    
    }
    
  13. Sekarang untuk file sumber daya yang berisi fragmen html. Buat file teks baru di folder proyek Anda dengan konten berikut:

    <div id="loginArea">
        <form method="post" id="loginForm" >
            <!-- These inputs are required by the presentation framework. Do not modify or remove -->
            <input id="authMethod" type="hidden" name="AuthMethod" value="%AuthMethod%" />
            <input id="context" type="hidden" name="Context" value="%Context%" />
            <!-- End inputs are required by the presentation framework. -->
            <p id="pageIntroductionText">This content is provided by the MFA sample adapter. Challenge inputs should be presented below.</p>
            <label for="challengeQuestionInput" class="block">Question text</label>
            <input id="challengeQuestionInput" name="ChallengeQuestionAnswer" type="text" value="" class="text" placeholder="Answer placeholder" />
            <div id="submissionArea" class="submitMargin">
                <input id="submitButton" type="submit" name="Submit" value="Submit" onclick="return AuthPage.submitAnswer()"/>
            </div>
        </form>
        <div id="intro" class="groupMargin">
            <p id="supportEmail">Support information</p>
        </div>
        <script type="text/javascript" language="JavaScript">
            //<![CDATA[
            function AuthPage() { }
            AuthPage.submitAnswer = function () { return true; };
            //]]>
        </script>
    </div>
    
  14. Kemudian, pilih Komponen Project-Add>... File sumber daya dan beri nama Sumber Daya file, dan klik Tambahkan:

    Screenshot of the Add New Item dialog box showing Resource File selected.

  15. Kemudian, dalam file Resources.resx , pilih Tambahkan Sumber Daya... Tambahkan file yang sudah ada. Navigasikan ke file teks (berisi fragmen html) yang Anda simpan di atas.

    Pastikan kode GetFormHtml Anda menyelesaikan nama sumber daya baru dengan benar oleh awalan nama file sumber daya (file.resx) diikuti dengan nama sumber daya itu sendiri:

    public string GetFormHtml(int lcid)
    {
        string htmlTemplate = Resources.MfaFormHtml; //Resxfilename.resourcename
        return htmlTemplate;
    }
    

Anda sekarang dapat membangun.

Membangun adaptor

Adaptor harus dibangun ke dalam rakitan .NET bernama kuat yang dapat diinstal ke GAC di Windows. Untuk mencapainya dalam proyek Visual Studio, selesaikan langkah-langkah berikut:

  1. Klik kanan nama proyek Anda di Penjelajah Solusi dan klik Properti.

  2. Pada tab Penandatanganan , centang Tanda tangani rakitan dan pilih <Baru...> di bawah Pilih file kunci nama yang kuat: Masukkan nama file kunci dan kata sandi dan klik OK. Kemudian pastikan Tanda tangani rakitan dicentang dan tanda Tunda saja tidak dicentang. Halaman Penandatanganan properti akan terlihat seperti ini:

    build the provider

  3. Kemudian bangun solusinya.

Menyebarkan adaptor ke mesin uji Ad FS Anda

Sebelum penyedia eksternal dapat dipanggil oleh Layanan Federasi Direktori Aktif, penyedia tersebut harus terdaftar dalam sistem. Penyedia adaptor harus menyediakan alat penginstal yang melakukan tindakan penginstalan yang diperlukan termasuk penginstalan di GAC, dan alat penginstal harus mendukung pendaftaran di LAYANAN Federasi Direktori Aktif. Jika itu tidak dilakukan, administrator perlu menjalankan langkah-langkah Windows PowerShell di bawah ini. Langkah-langkah ini dapat digunakan di lab untuk mengaktifkan pengujian dan penelusuran kesalahan.

Menyiapkan mesin AD FS pengujian

Salin file dan tambahkan ke GAC.

  1. Pastikan Anda memiliki komputer Windows Server 2012 R2 atau komputer virtual.

  2. Instal layanan peran Layanan Federasi Direktori Aktif dan konfigurasikan farm dengan setidaknya satu simpul.

    Untuk langkah-langkah terperinci untuk menyiapkan server federasi di lingkungan lab, lihat Panduan Penyebaran Layanan Federasi Direktori Aktif Windows Server 2012 R2.

  3. Salin alat Gacutil.exe ke server.

    Gacutil.exe dapat ditemukan di %homedrive%Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Tools pada komputer Windows 8. Anda akan memerlukan file gacutil.exe itu sendiri dan 1033, en-US, dan folder sumber daya lokal lainnya di bawah lokasi NETFX 4.0 Tools .

  4. Salin file penyedia Anda (satu atau beberapa file .dll yang ditandatangani nama kuat) ke lokasi folder yang sama dengan gacutil.exe (lokasi hanya untuk kenyamanan)

  5. Tambahkan file .dll Anda ke GAC di setiap server federasi Layanan Federasi Direktori Aktif di farm:

    Contoh: menggunakan alat baris perintah GACutil.exe untuk menambahkan dll ke GAC: C:>.gacutil.exe /if .<yourdllname>.dll

    Untuk melihat entri yang dihasilkan di GAC:C:>.gacutil.exe /l <yourassemblyname>

Mendaftarkan penyedia Anda di Layanan Federasi Direktori Aktif

Setelah prasyarat di atas terpenuhi, buka jendela perintah Windows PowerShell di server federasi Anda dan masukkan perintah berikut (perhatikan bahwa jika Anda menggunakan farm server federasi yang menggunakan Database Internal Windows, Anda harus menjalankan perintah ini di server federasi utama farm):

  1. Register-AdfsAuthenticationProvider –TypeName YourTypeName –Name “AnyNameYouWish” [–ConfigurationFilePath (optional)]

    Di mana YourTypeName adalah nama tipe kuat .NET Anda: "YourDefaultNamespace.YourIAuthenticationAdapterImplementationClassName, YourAssemblyName, Version=YourAssemblyVersion, Culture=neutral, PublicKeyToken=YourPublicKeyTokenValue, processorArchitecture=MSIL"

    Ini akan mendaftarkan penyedia eksternal Anda di Layanan Federasi Direktori Aktif, dengan Nama yang Anda berikan sebagai AnyNameYouWish di atas.

  2. Mulai ulang layanan Layanan Federasi Direktori Aktif (misalnya menggunakan snap-in Layanan Windows).

  3. Jalankan perintah berikut: Get-AdfsAuthenticationProvider.

    Ini menunjukkan penyedia Anda sebagai salah satu penyedia dalam sistem.

    Contoh:

    $typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”
    Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter”
    net stop adfssrv
    net start adfssrv
    

    Jika Anda mengaktifkan layanan pendaftaran perangkat di lingkungan Layanan Federasi Direktori Aktif, jalankan juga perintah PowerShell berikut: net start drs

    Untuk memverifikasi penyedia terdaftar, gunakan perintah PowerShell berikut:Get-AdfsAuthenticationProvider.

    Ini menunjukkan penyedia Anda sebagai salah satu penyedia dalam sistem.

Membuat kebijakan autentikasi Layanan Federasi Direktori Aktif yang memanggil adaptor Anda

Membuat kebijakan autentikasi menggunakan snap-in Manajemen Layanan Federasi Direktori Aktif

  1. Buka snap-in Manajemen Layanan Federasi Direktori Aktif (dari menu Alat Manajer Server).

  2. Klik Kebijakan Autentikasi.

  3. Di panel tengah, di bawah Autentikasi Multifaktor, klik tautan Edit di sebelah kanan Pengaturan Global.

  4. Di bawah Pilih metode autentikasi tambahan di bagian bawah halaman, centang kotak untuk AdminName penyedia Anda. Klik Terapkan.

  5. Untuk menyediakan "pemicu" untuk memanggil MFA menggunakan adaptor Anda, di bawah Lokasi , periksa Ekstranet dan Intranet, misalnya. Klik OK. (Untuk mengonfigurasi pemicu per pihak yang mengandalkan, lihat "Buat kebijakan autentikasi menggunakan Windows PowerShell" di bawah ini.)

  6. Periksa hasilnya menggunakan perintah berikut:

    Pertama gunakan Get-AdfsGlobalAuthenticationPolicy. Anda akan melihat Nama penyedia Anda sebagai salah satu nilai AdditionalAuthenticationProvider.

    selanjutnya gunakan Get-AdfsAdditionalAuthenticationRule. Anda akan melihat aturan untuk Extranet dan Intranet yang dikonfigurasi sebagai hasil dari pilihan kebijakan Anda di UI administrator.

Membuat kebijakan autentikasi menggunakan Windows PowerShell

  1. Pertama, aktifkan penyedia dalam kebijakan global:

    Set-AdfsGlobalAuthenticationPolicy -AdditionalAuthenticationProvider “YourAuthProviderName”`
    

    Catatan

    Perhatikan bahwa nilai yang disediakan untuk parameter AdditionalAuthenticationProvider sesuai dengan nilai yang Anda berikan untuk parameter "Nama" dalam cmdlet Register-AdfsAuthenticationProvider di atas dan ke properti "Nama" dari output cmdlet Get-AdfsAuthenticationProvider.

    Set-AdfsGlobalAuthenticationPolicy –AdditionalAuthenticationProvider “MyMFAAdapter”`
    
  2. Selanjutnya, konfigurasikan aturan khusus pihak global atau yang mengandalkan untuk memicu MFA:

    Contoh 1: untuk membuat aturan global guna mewajibkan MFA untuk permintaan Eksternal:

    Set-AdfsAdditionalAuthenticationRule –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
    

    Contoh 2: untuk membuat aturan MFA untuk mewajibkan MFA untuk permintaan eksternal ke pihak yang mengandalkan tertentu. (Catatan: Penyedia individu tidak dapat terhubung ke pihak yang mengandalkan individu di Layanan Federasi Direktori Aktif di Windows Server 2012 R2).

    $rp = Get-AdfsRelyingPartyTrust –Name <Relying Party Name>
    Set-AdfsRelyingPartyTrust –TargetRelyingParty $rp –AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
    

Mengautentikasi dengan MFA menggunakan adaptor Anda

Terakhir, lakukan langkah-langkah di bawah ini untuk menguji adaptor Anda:

  1. Pastikan jenis autentikasi Utama global Layanan Federasi Direktori Aktif dikonfigurasi sebagai Autentikasi Formulir untuk Ekstranet dan Intranet (ini membuat demo Anda lebih mudah diautentikasi sebagai pengguna tertentu)

    1. Di snap-in Layanan Federasi Direktori Aktif, di bawah Kebijakan Autentikasi, di area Autentikasi Utama, klik Edit di samping Pengaturan Global.

      1. Atau cukup klik tab Utama dari UI Kebijakan multifaktor.
  2. Pastikan Autentikasi Formulir adalah satu-satunya opsi yang dicentang untuk metode autentikasi Ekstranet dan Intranet. Klik OK.

  3. Buka halaman html masuk yang dimulai IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) dan masuk sebagai pengguna AD yang valid di lingkungan pengujian Anda.

  4. Masukkan kredensial untuk autentikasi utama.

  5. Anda akan melihat halaman formulir MFA dengan contoh pertanyaan tantangan muncul.

    Jika Anda memiliki lebih dari satu adaptor yang dikonfigurasi, Anda akan melihat halaman pilihan MFA dengan nama ramah Anda dari atas.

    Screenshot of the the M F A forms page with example challenge questions.

    Screenshot of the the M F A choice page.

Anda sekarang memiliki implementasi antarmuka yang berfungsi dan Anda memiliki pengetahuan tentang cara kerja model. Anda dapat mencoba sebagai contoh tambahan untuk mengatur titik henti di BeginAuthentication dan TryEndAuthentication. Perhatikan bagaimana BeginAuthentication dijalankan ketika pengguna pertama kali memasukkan formulir MFA, sedangkan TryEndAuthentication dipicu di setiap Kirim formulir.

Memperbarui adaptor untuk autentikasi yang berhasil

Tapi tunggu - adaptor contoh Anda tidak akan pernah berhasil mengautentikasi! Ini karena tidak ada dalam kode Anda yang mengembalikan null untuk TryEndAuthentication.

Dengan menyelesaikan prosedur di atas, Anda membuat implementasi adaptor dasar dan menambahkannya ke server Layanan Federasi Direktori Aktif. Anda bisa mendapatkan halaman formulir MFA, tetapi Anda belum dapat mengautentikasi karena Anda belum menempatkan logika yang benar dalam implementasi TryEndAuthentication Anda. Jadi mari kita tambahkan itu.

Ingat implementasi TryEndAuthentication Anda:

public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
    //return new instance of IAdapterPresentationForm derived class
    outgoingClaims = new Claim[0];
    return new MyPresentationForm();
}

Mari kita perbarui agar tidak selalu mengembalikan MyPresentationForm(). Untuk ini, Anda dapat membuat satu metode utilitas sederhana dalam kelas Anda:

static bool ValidateProofData(IProofData proofData, IAuthenticationContext authContext)
{
    if (proofData == null || proofData.Properties == null || !proofData.Properties.ContainsKey("ChallengeQuestionAnswer"))
    {
        throw new ExternalAuthenticationException("Error - no answer found", authContext);
    }

    if ((string)proofData.Properties["ChallengeQuestionAnswer"] == "adfabric")
    {
        return true;
    }
    else
    {
        return false;
    }
}

Kemudian, perbarui TryEndAuthentication seperti di bawah ini:

public IAdapterPresentation TryEndAuthentication(IAuthenticationContext authContext, IProofData proofData, HttpListenerRequest request, out Claim[] outgoingClaims)
{
    outgoingClaims = new Claim[0];
    if (ValidateProofData(proofData, authContext))
    {
        //authn complete - return authn method
        outgoingClaims = new[]
        {
            // Return the required authentication method claim, indicating the particulate authentication method used.
            new Claim( "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", "http://example.com/myauthenticationmethod1" )
        };
        return null;
    }
    else
    {
        //authentication not complete - return new instance of IAdapterPresentationForm derived class
        return new MyPresentationForm();
    }
}

Sekarang Anda harus memperbarui adaptor pada kotak uji. Anda harus terlebih dahulu membatalkan kebijakan LAYANAN Federasi Direktori Aktif, lalu membatalkan pendaftaran dari Ad FS dan memulai ulang LAYANAN Federasi Direktori Aktif, lalu menghapus .dll dari GAC, lalu menambahkan .dll baru ke GAC, lalu mendaftarkannya di LAYANAN Federasi Direktori Aktif, memulai ulang Layanan Federasi Direktori Aktif, dan mengonfigurasi ulang kebijakan AD FS.

Menyebarkan dan mengonfigurasi adaptor yang diperbarui pada mesin AD FS pengujian Anda

Menghapus Kebijakan Layanan Federasi Direktori Aktif

Kosongkan semua kotak centang terkait MFA di antarmuka pengguna MFA, yang ditunjukkan di bawah ini, lalu klik OK.

clear policy

Membatalkan pendaftaran penyedia (Windows PowerShell)

PS C:> Unregister-AdfsAuthenticationProvider –Name “YourAuthProviderName”

Contoh:PS C:> Unregister-AdfsAuthenticationProvider –Name “MyMFAAdapter”

Nilai yang Anda berikan untuk "Nama" adalah nilai yang sama dengan "Nama" yang Anda berikan ke cmdlet Register-AdfsAuthenticationProvider. Ini juga merupakan properti "Nama" yang merupakan output dari Get-AdfsAuthenticationProvider.

Sebelum membatalkan pendaftaran penyedia, Anda harus menghapus penyedia dari AdfsGlobalAuthenticationPolicy (baik dengan menghapus kotak centang yang Anda periksa di snap-in manajemen Layanan Federasi Direktori Aktif atau dengan menggunakan Windows PowerShell.)

Layanan Layanan Federasi Direktori Aktif harus dimulai ulang setelah operasi ini.

Menghapus assembly dari GAC

  1. Pertama, gunakan perintah berikut untuk menemukan nama kuat entri yang sepenuhnya memenuhi syarat:C:>.gacutil.exe /l <yourAdapterAssemblyName>

    Contoh:C:>.gacutil.exe /l mfaadapter

  2. Kemudian, gunakan perintah berikut untuk menghapusnya dari GAC:.gacutil /u “<output from the above command>”

    Contoh:C:>.gacutil /u “mfaadapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”

Menambahkan rakitan yang diperbarui ke GAC

Pastikan Anda menempelkan .dll yang diperbarui secara lokal terlebih dahulu. C:>.gacutil.exe /if .MFAAdapter.dll

Menampilkan rakitan di GAC (baris cmd)

C:> .gacutil.exe /l mfaadapter

Mendaftarkan penyedia Anda di Layanan Federasi Direktori Aktif

  1. PS C:>$typeName = "MFAadapter.MyAdapter, MFAadapter, Version=1.0.0.1, Culture=neutral, PublicKeyToken=e675eb33c62805a0, processorArchitecture=MSIL”

  2. PS C:>Register-AdfsAuthenticationProvider -TypeName $typeName -Name “MyMFAAdapter1”

  3. Mulai ulang layanan AD FS.

Membuat kebijakan autentikasi menggunakan snap-in Manajemen Layanan Federasi Direktori Aktif

  1. Buka snap-in Manajemen Layanan Federasi Direktori Aktif (dari menu Alat Manajer Server).

  2. Klik Kebijakan Autentikasi.

  3. Di bawah Autentikasi Multifaktor, klik tautan Edit di sebelah kanan Pengaturan Global.

  4. Di bawah Pilih metode autentikasi tambahan, centang kotak untuk AdminName penyedia Anda. Klik Terapkan.

  5. Untuk menyediakan "pemicu" untuk memanggil MFA menggunakan adaptor Anda, di bawah Lokasi, periksa Ekstranet dan Intranet, misalnya. Klik OK.

Mengautentikasi dengan MFA menggunakan adaptor Anda

Terakhir, lakukan langkah-langkah di bawah ini untuk menguji adaptor Anda:

  1. Pastikan jenis autentikasi Utama global Layanan Federasi Direktori Aktif dikonfigurasi sebagai Autentikasi Formulir untuk Extranet dan Intranet (ini memudahkan untuk mengautentikasi sebagai pengguna tertentu).

    1. Di snap-in manajemen Layanan Federasi Direktori Aktif, di bawah Kebijakan Autentikasi, di area Autentikasi Utama, klik Edit di samping Pengaturan Global.

      1. Atau cukup klik tab Utama dari UI Kebijakan multifaktor .
  2. Pastikan Autentikasi Formulir adalah satu-satunya opsi yang dicentang untuk metode autentikasi Ekstranet dan Intranet . Klik OK.

  3. Buka halaman html masuk yang dimulai IDP (https://< fsname>/adfs/ls/idpinitiatedsignon.htm) dan masuk sebagai pengguna AD yang valid di lingkungan pengujian Anda.

  4. Masukkan kredensial untuk autentikasi utama.

  5. Anda akan melihat halaman formulir MFA dengan contoh teks tantangan muncul.

    1. Jika Anda memiliki lebih dari satu adaptor yang dikonfigurasi, Anda akan melihat halaman pilihan MFA dengan nama ramah Anda.

Anda akan melihat proses masuk yang berhasil saat memasukkan adfabric di halaman autentikasi MFA.

Screenshot of the M F A forms page with example challenge text.

Screenshot of the M F A successful sign in page.

Lihat Juga

Sumber Daya Lain

Metode Autentikasi Tambahan

Mengelola Risiko dengan Autentikasi Multifaktor Tambahan untuk Aplikasi Sensitif