Autentikasi Paspor di WinHTTP

Microsoft Windows HTTP Services (WinHTTP) sepenuhnya mendukung penggunaan sisi klien dari protokol autentikasi Microsoft Passport. Topik ini memberikan gambaran umum tentang transaksi yang terlibat dalam autentikasi Paspor dan cara menanganinya.

Catatan

Di WinHTTP 5.1, autentikasi Paspor dinonaktifkan secara default.

 

Paspor 1.4

Paspor adalah komponen inti dari layanan blok penyusun Microsoft .NET. Ini memungkinkan bisnis untuk mengembangkan dan menawarkan layanan Web terdistribusi di berbagai aplikasi dan memungkinkan anggotanya untuk menggunakan satu nama masuk dan kata sandi di semua situs Web yang berpartisipasi.

WinHTTP menyediakan dukungan platform untuk Microsoft Passport 1.4 dengan menerapkan protokol sisi klien untuk autentikasi Paspor 1.4. Ini membebaskan aplikasi dari detail berinteraksi dengan infrastruktur Paspor dan Nama Pengguna dan Kata Sandi Tersimpan di Windows XP. Abstraksi ini membuat penggunaan Paspor tidak berbeda dari perspektif pengembang daripada menggunakan skema autentikasi tradisional seperti Basic atau Digest.

Windows XP: Kunci registri HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns mengidentifikasi berapa kali Wizard Autentikasi Paspor ditampilkan saat autentikasi PassPort diperlukan. Jika nilai untuk kunci ini diatur ke angka yang lebih besar dari 5, wizard tidak ditampilkan.

Bagian berikut menjelaskan transaksi yang terlibat dalam autentikasi Paspor dari sudut pandang aplikasi klien. Untuk pengembangan Paspor sisi server, lihat Gambaran Umum Dokumentasi SDK Paspor.

Permintaan Awal

Ketika klien meminta sumber daya di server yang memerlukan autentikasi Paspor, server memeriksa permintaan keberadaan tiket. Jika tiket yang valid dikirim dengan permintaan, server merespons dengan sumber daya yang diminta. Jika tiket tidak ada di klien, server merespons dengan kode status 302. Responsnya mencakup header tantangan, "WWW-Authenticate: Passport1.4". Klien yang tidak menggunakan Paspor dapat mengikuti pengalihan ke server login Paspor. Klien yang lebih canggih biasanya menghubungi perhubungan Paspor untuk menentukan lokasi server masuk Paspor.

Catatan

Pusat ke jaringan Microsoft Passport adalah Nexus Paspor, yang memfasilitasi sinkronisasi situs peserta Paspor untuk memastikan bahwa setiap situs memiliki detail terbaru tentang konfigurasi jaringan dan masalah lainnya. Setiap komponen Paspor (Manajer Paspor, Server masuk, Server pembaruan, dan sebagainya) secara berkala berkomunikasi dengan Nexus untuk mengambil informasi yang diperlukan untuk menemukan, dan berkomunikasi dengan benar, komponen lain dalam jaringan Paspor. Informasi ini diambil sebagai dokumen XML yang disebut Dokumen Konfigurasi Komponen, atau CCD.

 

Gambar berikut menunjukkan permintaan awal ke afiliasi Paspor.

gambar menunjukkan permintaan awal ke afiliasi paspor.

Server Masuk Paspor

Server login Paspor menangani semua permintaan tiket untuk sumber daya apa pun di otoritas domain Paspor. Sebelum permintaan dapat diautentikasi menggunakan Paspor, aplikasi klien harus menghubungi server login untuk mendapatkan tiket yang sesuai.

Ketika klien meminta tiket dari server login Paspor, server login biasanya merespons dengan kode status 401 untuk menunjukkan bahwa kredensial pengguna harus disediakan. Ketika kredensial ini disediakan, server login merespons dengan tiket yang diperlukan untuk mengakses sumber daya yang ditentukan di server yang berisi sumber daya yang awalnya diminta. Server login juga dapat mengalihkan klien ke server lain yang dapat menyediakan sumber daya yang diminta.

gambar menunjukkan permintaan tiket klien ke server login paspor.

Permintaan Terautentikasi

Ketika klien memiliki tiket yang sesuai dengan server tertentu, tiket tersebut disertakan dengan semua permintaan ke server tersebut. Jika tiket belum dimodifikasi sejak diambil dari server masuk Paspor, dan tiket valid untuk server sumber daya, server sumber daya mengirimkan respons yang mencakup sumber daya dan cookie yang diminta yang menunjukkan bahwa pengguna diautentikasi untuk permintaan di masa mendatang.

Cookie tambahan dalam respons dimaksudkan untuk mempercepat proses autentikasi. Permintaan tambahan dalam sesi yang sama untuk sumber daya di server di Otoritas Domain Paspor yang sama semuanya menyertakan cookie tambahan ini. Kredensial tidak perlu dikirim ke server masuk lagi sampai cookie kedaluwarsa.

gambar menunjukkan permintaan terautentikasi ke server masuk paspor.

Menggunakan Paspor di WinHTTP

Autentikasi paspor di WinHTTP sangat mirip dengan skema autentikasi lainnya. Lihat Autentikasi di WinHTTP untuk gambaran umum autentikasi di WinHTTP.

Di WinHTTP 5.1, autentikasi Paspor dinonaktifkan secara default dan harus diaktifkan secara eksplisit dengan WinHttpSetOption sebelum digunakan.

WinHTTP menangani banyak detail transaksi secara internal untuk autentikasi Paspor. Selama permintaan awal, server merespons dengan kode status 302 saat autentikasi diperlukan. Kode status 302 sebenarnya menunjukkan pengalihan dan merupakan bagian dari protokol Paspor untuk kompatibilitas mundur. WinHTTP menyembunyikan kode status 302 dan menghubungi nexus Paspor, lalu server masuk. Aplikasi WinHTTP diberi tahu tentang kode status 401 yang dikirim oleh server masuk untuk meminta kredensial pengguna. Namun, ke aplikasi, tampaknya seolah-olah status 401 berasal dari server tempat sumber daya diminta. Dengan cara ini, aplikasi WinHTTP tidak menyadari interaksi dengan server lain, dan dapat menangani autentikasi Paspor dengan kode yang sama yang menangani skema autentikasi lainnya.

Biasanya, aplikasi WinHTTP merespons kode status 401 dengan menyediakan kredensial autentikasi. Ketika kredensial diberikan dengan WinHttpSetCredentials atau SetCredentials untuk autentikasi paspor, kredensial sebenarnya dikirim ke server masuk, bukan ke server yang ditunjukkan dalam permintaan.

Namun, saat merespons kode status 407, aplikasi WinHTTP harus menggunakan WinHttpSetOption untuk memberikan kredensial proksi, bukan WinHttpSetCredentials. Karena WinHttpSetOption adalah cara yang kurang aman untuk menyediakan kredensial, biasanya harus dihindari.

Setelah diambil, tiket dikelola secara internal dan secara otomatis dikirim ke server yang berlaku dalam permintaan mendatang.

Catatan

WinHTTP memungkinkan Anda menonaktifkan pengalihan otomatis dengan memanggil fungsi WinHttpSetOption untuk bendera WINHTTP_OPTION_DISABLE_FEATURE dan menentukan nilai WINHTTP_DISABLE_REDIRECTS. Menonaktifkan pengalihan tidak mengganggu pengalihan yang ditangani WinHTTP secara internal untuk transaksi Paspor.

 

WinHTTP berhasil menyelesaikan autentikasi Paspor meskipun aplikasi menonaktifkan pengalihan otomatis. Namun, setelah autentikasi Paspor selesai, pengalihan implisit harus terjadi dari URL server masuk Paspor kembali ke URL asli. Pengalihan ini tidak dipicu oleh respons HTTP 302, tetapi implisit dalam protokol Paspor.

WinHTTP menangani pengalihan implisit ini secara khusus. Jika aplikasi telah menonaktifkan pengalihan otomatis, WinHTTP mengharuskan aplikasi memberikan "izin" WinHTTP untuk mengalihkan secara otomatis dalam kasus khusus ini.

Agar WinHTTP dialihkan kembali ke URL asli setelah autentikasi, aplikasi harus mendaftarkan fungsi panggilan balik menggunakan WinHttpSetStatusCallback. WinHTTP kemudian dapat memberi tahu aplikasi dengan panggilan balik WINHTTP_CALLBACK_STATUS_REDIRECT, yang memungkinkan aplikasi membatalkan pengalihan. Aplikasi tidak perlu menyediakan fungsionalitas apa pun dalam fungsi panggilan balik; pendaftaran panggilan balik cukup untuk mengaktifkan WinHTTP untuk mengikuti pengalihan kasus khusus ini.

Pesan ERROR_WINHTTP_LOGIN_FAILURE dihasilkan jika fungsi panggilan balik tidak diatur oleh aplikasi.

Paspor Cobranding

Tidak seperti skema autentikasi tradisional yang didukung oleh WinHTTP, Paspor dapat dikobranding secara ekstensif. Setelah menerima kode status 401 yang menunjukkan tantangan, aplikasi dapat mengambil grafik dan teks kobranding . Ambil URL untuk grafik kobranding dengan memanggil WinHttpQueryOption dengan bendera WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Ambil teks kobranding dengan memanggil WinHttpQueryOption dengan bendera WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT. Item ini dapat digunakan untuk menyesuaikan dialog pengumpulan kredensial.

Nama Pengguna dan Kata Sandi Tersimpan

Windows XP memperkenalkan konsep Nama Pengguna dan Kata Sandi Tersimpan. Jika kredensial Paspor pengguna disimpan melalui Wizard Pendaftaran Paspor atau Dialog Kredensial standar, kredensial tersebut disimpan di Nama Pengguna dan Kata Sandi tersimpan. Saat menggunakan WinHTTP di Windows XP atau yang lebih baru, WinHTTP secara otomatis menggunakan kredensial di Nama Pengguna dan Kata Sandi Tersimpan jika kredensial tidak diatur secara eksplisit. Ini mirip dengan dukungan kredensial masuk default untuk NTLM/Kerberos. Namun, penggunaan kredensial Paspor default tidak tunduk pada pengaturan kebijakan masuk otomatis.

Menonaktifkan Autentikasi Paspor

Beberapa aplikasi mungkin memerlukan kemampuan untuk menonaktifkan autentikasi Paspor. Misalnya, ketika afiliasi Paspor merespons dengan kode status 302 awal, mungkin lebih baik mengikuti pengalihan yang ditunjukkan dan merender halaman autentikasi Paspor HTML daripada mengizinkan WinHTTP untuk menangani autentikasi secara internal. Autentikasi paspor dinonaktifkan di WinHTTP dengan memanggil fungsi WinHttpSetOption dengan opsi WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH dan meneruskan nilai WINHTTP_DISABLE_PASSPORT_AUTH. Ini nantinya dapat diaktifkan kembali dengan WINHTTP_ENABLE_PASSPORT_AUTH.

Autentikasi paspor tidak dapat dinonaktifkan saat menggunakan objek WinHttpRequest .

Seperti disebutkan sebelumnya di bagian ini, autentikasi Paspor dinonaktifkan secara default di WinHTTP 5.1, dan harus diaktifkan secara eksplisit dengan WinHttpSetOption sebelum digunakan.

Penggantian Konfigurasi Paspor yang Digunakan untuk Pengujian

WinHTTP mengandalkan informasi konfigurasi yang diunduhnya dari server nexus paspor untuk mendukung autentikasi Paspor 1.4. Secara default server aman (SSL) ini nexus.passport.com, dan sumber daya konfigurasi adalah rdr/pprdr.asp, yang dikenal sebagai konfigurasi paspor "langsung". Format informasi adalah header HTTP kustom "PassportURLs", diikuti oleh pasangan atribut-nilai yang dibatasi koma.

Misalnya, "https://nexus.passport.com/rdr/pprdr.asp" mengembalikan informasi konfigurasi berikut:

PassportURLs: DARealm=Passport.net,
DALogin=login.passport.com/login2.asp,
DAReg=https://register.passport.com/defaultwiz.asp,
Properties=https://memberservices.passport.com/ppsecure/MSRV_EditProfile.asp,
Privacy=https://www.passport.com/consumer/privacypolicy.asp,
GeneralRedir=https://nexusrdr.passport.com/redir.asp,
Help=https://memberservices.passport.com/UI/MSRV_UI_Help.asp,
ConfigVersion=2
\r\n

Bagian yang relevan dengan WinHTTP adalah DARealm, DALogin, dan ConfigVersion. Untuk alasan performa, mereka di-cache selama masa pakai sesi WinHTTP. Ketiga nilai ini dapat ditimpa oleh aplikasi yang diperlukan untuk bekerja dengan infrastruktur paspor lain selain pengaturan produksi "langsung" dengan mengubah pengaturan registri yang sesuai di bawah

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
LoginServerRealm (REG_SZ)    For example: abc.net
LoginServerUrl (REG_SZ)      For example: https://private-login.passport.com/login2.asp
ConfigVersion (REG_DWORD)    For example: 10

Jika LoginServerUrl ada di registri, WinHTTP tidak menghubungi server nexus untuk nilai konfigurasi lainnya. Dalam hal ini, LoginServerRealm dan ConfigVersion juga harus diatur melalui registri untuk memperbaiki nilai.

Aplikasi dapat, untuk tujuan pengujian, diperlukan untuk mengunduh konfigurasi paspor dari server nexus privat. Ini dapat dilakukan dengan mengesampingkan dua nilai registri di bawah

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
NexusHost (REG_SZ)    e.g. private-nexus.passport.com
NexusObj(REG_SZ)      e.g. config/passport.asp

Autentikasi di WinHTTP