Broker autentikasi web

Artikel ini menjelaskan cara menghubungkan aplikasi Universal Windows Platform (UWP) Anda ke idP online yang menggunakan protokol autentikasi seperti OpenID atau OAuth, seperti Facebook, Twitter, Flickr, Instagram, dan sebagainya. Metode AuthenticateAsync mengirimkan permintaan ke IdP online dan mendapatkan kembali token akses yang menjelaskan sumber daya penyedia tempat aplikasi memiliki akses.

Catatan

Untuk sampel kode kerja yang lengkap, kloning repositori WebAuthenticationBroker di GitHub.

 

Daftarkan aplikasi Anda dengan penyedia online Anda

Anda harus mendaftarkan aplikasi Anda dengan penyedia identitas online yang ingin Anda sambungkan. Anda dapat mengetahui cara mendaftarkan aplikasi Anda dari IdP. Setelah mendaftar, penyedia online biasanya memberi Anda Id atau kunci rahasia untuk aplikasi Anda.

Membangun URI permintaan autentikasi

URI permintaan terdiri dari alamat tempat Anda mengirim permintaan autentikasi ke penyedia online Anda ditambahkan dengan informasi lain yang diperlukan, seperti ID aplikasi atau rahasia, URI pengalihan tempat pengguna dikirim setelah menyelesaikan autentikasi, dan jenis respons yang diharapkan. Anda dapat mengetahui dari penyedia Anda parameter apa yang diperlukan.

URI permintaan dikirim sebagai parameter requestUri dari metode AuthenticateAsync . Ini harus berupa alamat yang aman (harus dimulai dengan https://)

Contoh berikut menunjukkan cara membuat URI permintaan.

string startURL = "https://<providerendpoint>?client_id=<clientid>&scope=<scopes>&response_type=token";
string endURL = "http://<appendpoint>";

System.Uri startURI = new System.Uri(startURL);
System.Uri endURI = new System.Uri(endURL);

Koneksi ke penyedia online

Anda memanggil metode AuthenticateAsync untuk menyambungkan ke IdP online dan mendapatkan token akses. Metode ini mengambil URI yang dibangun pada langkah sebelumnya sebagai parameter requestUri , dan URI tempat Anda ingin pengguna dialihkan sebagai parameter callbackUri .

string result;

try
{
    var webAuthenticationResult = 
        await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync( 
        Windows.Security.Authentication.Web.WebAuthenticationOptions.None, 
        startURI, 
        endURI);

    switch (webAuthenticationResult.ResponseStatus)
    {
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
            // Successful authentication. 
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
            // HTTP error. 
            result = webAuthenticationResult.ResponseErrorDetail.ToString(); 
            break;
        default:
            // Other error.
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
    } 
}
catch (Exception ex)
{
    // Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here. 
    result = ex.Message;
}

Peringatan

Selain AuthenticateAsync, Windows. Namespace Security.Authentication.Web berisi metode AuthenticateAndContinue. Jangan panggil metode ini. Ini dirancang untuk aplikasi yang hanya menargetkan Windows Phone 8.1 dan tidak digunakan lagi dimulai dengan Windows 10.

Menyambungkan dengan akses menyeluruh (SSO).

Secara default, broker autentikasi Web tidak mengizinkan cookie untuk bertahan. Karena itu, bahkan jika pengguna aplikasi menunjukkan bahwa mereka ingin tetap masuk (misalnya, dengan memilih kotak centang dalam dialog masuk penyedia), mereka harus masuk setiap kali mereka ingin mengakses sumber daya untuk penyedia tersebut. Untuk masuk dengan SSO, penyedia identitas online Anda harus mengaktifkan SSO untuk broker autentikasi Web, dan aplikasi Anda harus memanggil kelebihan beban AuthenticateAsync yang tidak mengambil parameter callbackUri . Ini akan memungkinkan cookie yang bertahan disimpan oleh broker autentikasi web, sehingga panggilan autentikasi di masa mendatang oleh aplikasi yang sama tidak akan memerlukan rincian masuk berulang oleh pengguna (pengguna secara efektif "masuk" sampai token akses kedaluwarsa).

Untuk mendukung SSO, penyedia online harus memungkinkan Anda mendaftarkan URI pengalihan dalam formulir ms-app://<appSID>, di mana <appSID> adalah SID untuk aplikasi Anda. Anda dapat menemukan SID aplikasi dari halaman pengembang aplikasi untuk aplikasi Anda, atau dengan memanggil metode GetCurrentApplicationCallbackUri .

string result;

try
{
    var webAuthenticationResult = 
        await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync( 
        Windows.Security.Authentication.Web.WebAuthenticationOptions.None, 
        startURI);

    switch (webAuthenticationResult.ResponseStatus)
    {
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
            // Successful authentication. 
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
        case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
            // HTTP error. 
            result = webAuthenticationResult.ResponseErrorDetail.ToString(); 
            break;
        default:
            // Other error.
            result = webAuthenticationResult.ResponseData.ToString(); 
            break;
    } 
}
catch (Exception ex)
{
    // Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here. 
    result = ex.Message;
}

Awakutu

Ada beberapa cara untuk memecahkan masalah API broker autentikasi web, termasuk meninjau log operasional dan meninjau permintaan dan respons web menggunakan Fiddler.

Log Operasional

Seringkali Anda dapat menentukan apa yang tidak berfungsi dengan menggunakan log operasional. Ada saluran log peristiwa khusus Microsoft-Windows-WebAuth\Operational yang memungkinkan pengembang situs web untuk memahami bagaimana halaman web mereka diproses oleh broker autentikasi Web. Untuk mengaktifkannya, luncurkan eventvwr.exe dan aktifkan Log operasional di bawah Aplikasi dan Layanan\Microsoft\Windows\WebAuth. Selain itu, broker autentikasi Web menambahkan string unik ke string agen pengguna untuk mengidentifikasi dirinya sendiri di server web. String adalah "MSAuthHost/1.0". Perhatikan bahwa nomor versi dapat berubah di masa mendatang, jadi Anda tidak boleh bergantung pada nomor versi tersebut dalam kode Anda. Contoh string agen pengguna lengkap, diikuti dengan langkah-langkah penelusuran kesalahan penuh, adalah sebagai berikut.

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MSAuthHost/1.0)

  1. Aktifkan log operasional.
  2. Jalankan aplikasi sosial Contoso. event viewer displaying the webauth operational logs
  3. Entri log yang dihasilkan dapat digunakan untuk memahami perilaku broker autentikasi Web secara lebih rinci. Dalam hal ini, ini dapat mencakup:
    • Navigasi Mulai: Log saat AuthHost dimulai dan berisi informasi tentang URL mulai dan penghentian.
    • illustrates the details of navigation start
    • Navigasi Selesai: Mencatat penyelesaian pemuatan halaman web.
    • Meta Tag: Mencatat saat meta-tag ditemui termasuk detailnya.
    • Navigasi Dihentikan: Navigasi dihentikan oleh pengguna.
    • Kesalahan Navigasi: AuthHost mengalami kesalahan navigasi di URL termasuk HttpStatusCode.
    • Akhir Navigasi: URL Penghentian ditemui.

Fiddler

Debugger web Fiddler dapat digunakan dengan aplikasi. Untuk informasi selengkapnya, lihat Dokumentasi Fiddler

  1. Karena AuthHost berjalan dalam kontainer aplikasinya sendiri, untuk memberinya kemampuan jaringan privat, Anda harus mengatur kunci registri: Windows Editor Registri Versi 5.00

    \ HKEY_LOCAL_MACHINE PERANGKAT LUNAK\Microsoft\Windows Opsi \ Eksekusi File NTCurrentVersionImage\\authhost.exe\EnablePrivateNetwork = 00000001

    Jika Anda tidak memiliki kunci registri ini, Anda dapat membuatnya di Prompt Perintah dengan hak istimewa administrator.

    REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe" /v EnablePrivateNetwork /t REG_DWORD /d 1 /f
    
  2. Tambahkan aturan untuk AuthHost karena inilah yang menghasilkan lalu lintas keluar.

    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
    D:\Windows\System32>CheckNetIsolation.exe LoopbackExempt -s
    List Loopback Exempted AppContainers
    [1] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
        SID:  S-1-15-2-1973105767-3975693666-32999980-3747492175-1074076486-3102532000-500629349
    [2] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
        SID:  S-1-15-2-166260-4150837609-3669066492-3071230600-3743290616-3683681078-2492089544
    [3] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.a.p_8wekyb3d8bbwe
        SID:  S-1-15-2-3506084497-1208594716-3384433646-2514033508-1838198150-1980605558-3480344935
    
  3. Tambahkan aturan firewall untuk lalu lintas masuk ke Fiddler.