Condividi tramite


Autenticazione passport in WinHTTP

Microsoft Windows HTTP Services (WinHTTP) supporta completamente l'uso lato client del protocollo di autenticazione di Microsoft Passport. In questo argomento viene fornita una panoramica delle transazioni coinvolte nell'autenticazione passport e come gestirle.

Nota

In WinHTTP 5.1 l'autenticazione passport è disabilitata per impostazione predefinita.

 

Passport 1.4

Passport è un componente principale dei servizi di blocco predefiniti Microsoft .NET. Consente alle aziende di sviluppare e offrire servizi Web distribuiti in un'ampia gamma di applicazioni e consente ai suoi membri di usare un nome e una password di accesso in tutti i siti Web partecipanti.

WinHTTP offre il supporto della piattaforma per Microsoft Passport 1.4 implementando il protocollo lato client per l'autenticazione passport 1.4. Consente di liberare le applicazioni dai dettagli dell'interazione con l'infrastruttura Passport e i nomi utente archiviati e le password in Windows XP. Questa astrazione rende l'uso di Passport diverso dal punto di vista di uno sviluppatore rispetto all'uso di schemi di autenticazione tradizionali come Basic o Digest.

Windows XP: La chiave del Registro di sistema HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns identifica il numero di volte in cui è necessaria l'autenticazione passPort. Se il valore per questa chiave è impostato su un numero maggiore di 5, la procedura guidata non viene visualizzata.

Le sezioni seguenti descrivono le transazioni coinvolte nell'autenticazione Passport dal punto di vista di un'applicazione client. Per lo sviluppo di Passport sul lato server, vedere Panoramica della documentazione di Passport SDK.

Richiesta iniziale

Quando un client richiede una risorsa in un server che richiede l'autenticazione Passport, il server controlla la richiesta di presenza di ticket. Se viene inviato un ticket valido con la richiesta, il server risponde con la risorsa richiesta. Se il ticket non esiste nel client, il server risponde con un codice di stato 302. La risposta include l'intestazione di sfida "WWW-Authentication: Passport1.4". I client che non usano Passport possono seguire il reindirizzamento al server di accesso Passport. I client più avanzati in genere contattano il nexus Passport per determinare la posizione del server di accesso Passport.

Nota

Central to the Microsoft Passport network is the Passport Nexus, che facilita la sincronizzazione dei siti dei partecipanti Passport per garantire che ogni sito abbia i dettagli più recenti sulla configurazione di rete e altri problemi. Ogni componente Passport (Passport Manager, server di accesso, server di aggiornamento e così via) comunica periodicamente con il Nexus per recuperare le informazioni che deve individuare e comunicare correttamente con gli altri componenti della rete Passport. Queste informazioni vengono recuperate come documento XML denominato documento di configurazione componente o CCD.

 

L'immagine seguente mostra la richiesta iniziale a un affiliato Passport.

l'immagine mostra la richiesta iniziale a un affiliato di passaporto.

Server di accesso Passport

Un server di accesso Passport gestisce tutte le richieste di biglietti per qualsiasi risorsa in un'autorità di dominio Passport. Prima di poter autenticare una richiesta usando Passport, l'applicazione client deve contattare il server di accesso per ottenere i ticket appropriati.

Quando un client richiede i ticket da un server di accesso Passport, il server di accesso risponde in genere con un codice di stato 401 per indicare che devono essere fornite le credenziali utente. Quando vengono fornite queste credenziali, il server di accesso risponde con i ticket necessari per accedere alla risorsa specificata nel server che contiene la risorsa richiesta originariamente. Il server di accesso può anche reindirizzare il client a un altro server che può fornire la risorsa richiesta.

l'immagine mostra una richiesta di ticket client a un server di accesso passport.

Richiesta autenticata

Quando il client dispone dei ticket corrispondenti a un determinato server, tali ticket sono inclusi in tutte le richieste a tale server. Se i ticket non sono stati modificati poiché sono stati recuperati dal server di accesso Passport e i ticket sono validi per il server di risorse, il server di risorse invia una risposta che include sia la risorsa richiesta che i cookie che indicano che l'utente è autenticato per le richieste future.

I cookie aggiuntivi nella risposta sono destinati a velocizzare il processo di autenticazione. Le richieste aggiuntive nella stessa sessione per le risorse nei server nella stessa Autorità di dominio Passport includono tutti questi cookie aggiuntivi. Le credenziali non devono essere inviate nuovamente al server di accesso fino alla scadenza dei cookie.

l'immagine mostra una richiesta autenticata al server di accesso passport.

Uso di Passport in WinHTTP

L'autenticazione passport in WinHTTP è molto simile ad altri schemi di autenticazione. Per una panoramica dell'autenticazione in WinHTTP, vedere Autenticazione in WinHTTP .

In WinHTTP 5.1 l'autenticazione passport è disabilitata per impostazione predefinita e deve essere abilitata in modo esplicito con WinHttpSetOption prima dell'uso.

WinHTTP gestisce molti dei dettagli delle transazioni internamente per l'autenticazione passport. Durante la richiesta iniziale, il server risponde con un codice di stato 302 quando è necessaria l'autenticazione. Il codice di stato 302 indica effettivamente un reindirizzamento e fa parte del protocollo Passport per la compatibilità con le versioni precedenti. WinHTTP nasconde il codice di stato 302 e contatta il nexus Passport e quindi il server di accesso. L'applicazione WinHTTP riceve una notifica del codice di stato 401 inviato dal server di accesso per richiedere le credenziali utente. All'applicazione, tuttavia, viene visualizzato come se lo stato 401 proviene dal server da cui è stata richiesta la risorsa. In questo modo, l'applicazione WinHTTP non è a conoscenza delle interazioni con altri server e può gestire l'autenticazione Passport con lo stesso codice che gestisce altri schemi di autenticazione.

In genere, un'applicazione WinHTTP risponde a un codice di stato 401 fornendo le credenziali di autenticazione. Quando le credenziali vengono fornite con WinHttpSetCredentials o SetCredentials per l'autenticazione passport, le credenziali vengono effettivamente inviate al server di accesso, non al server indicato nella richiesta.

Tuttavia, quando risponde a un codice di stato 407, un'applicazione WinHTTP deve usare WinHttpSetOption per fornire credenziali proxy, anziché WinHttpSetCredentials. Poiché WinHttpSetOption è un modo meno sicuro per fornire le credenziali, è consigliabile evitare normalmente.

Una volta recuperati, i ticket vengono gestiti internamente e vengono inviati automaticamente ai server applicabili nelle richieste future.

Nota

WinHTTP consente di disabilitare il reindirizzamento automatico chiamando la funzione WinHttpSetOption per il flag WINHTTP_OPTION_DISABLE_FEATURE e specificando un valore di WINHTTP_DISABLE_REDIRECTS. La disabilitazione del reindirizzamento non interferisce con il reindirizzamento gestito da WinHTTP internamente per le transazioni Passport.

 

WinHTTP può completare correttamente l'autenticazione Passport anche se un'applicazione disabilita il reindirizzamento automatico. Tuttavia, dopo aver completato l'autenticazione passport, un reindirizzamento implicito deve verificarsi dall'URL del server di accesso Passport all'URL originale. Questo reindirizzamento non viene attivato da una risposta HTTP 302, ma è implicita nel protocollo Passport.

WinHTTP gestisce specialmente questo reindirizzamento implicito. Se un'applicazione ha disabilitato il reindirizzamento automatico, WinHTTP richiede che l'applicazione assegna a WinHTTP "autorizzazione" per reindirizzare automaticamente in questo caso speciale.

Per avere il reindirizzamento WinHTTP all'URL originale dopo l'autenticazione, l'applicazione deve registrare una funzione di callback usando WinHttpSetStatusCallback. WinHTTP può quindi inviare una notifica all'applicazione con un callback WINHTTP_CALLBACK_STATUS_REDIRECT, che consente all'applicazione di annullare il reindirizzamento. Un'applicazione non deve fornire alcuna funzionalità nella funzione di callback; la registrazione del callback è sufficiente per consentire a WinHTTP di seguire questo reindirizzamento in caso speciale.

Il messaggio ERROR_WINHTTP_LOGIN_FAILURE viene generato se una funzione di callback non è impostata dall'applicazione.

Passport Cobranding

A differenza di schemi di autenticazione tradizionali supportati da WinHTTP, Passport può essere ampiamente cobranded. Dopo aver ricevuto un codice di stato 401 che indica una sfida, un'applicazione può recuperare l'elemento grafico e il testo cobranding . Recuperare un URL per l'elemento grafico cobranding chiamando WinHttpQueryOption con il flag WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Recuperare il testo di cobranding chiamando WinHttpQueryOption con il flag di WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT. Questi elementi possono essere usati per personalizzare una finestra di dialogo di raccolta credenziali.

Gestione nomi utente e password archiviati

Windows XP ha introdotto il concetto di nomi utente archiviati e password. Se le credenziali passport di un utente vengono salvate tramite la Registrazione guidata passport o la finestra di dialogo credenziali standard, viene salvata nei nomi utente archiviati e nelle password. Quando si usa WinHTTP in Windows XP o versioni successive, WinHTTP usa automaticamente le credenziali nei nomi utente archiviati e nelle password se le credenziali non sono impostate in modo esplicito. È simile al supporto delle credenziali di accesso predefinite per NTLM/Kerberos. Tuttavia, l'uso delle credenziali di Passport predefinite non è soggetto alle impostazioni dei criteri di accesso automatico.

Disabilitazione dell'autenticazione passport

Alcune applicazioni potrebbero richiedere la possibilità di disabilitare l'autenticazione Passport. Ad esempio, quando un affiliato Passport risponde con il codice di stato iniziale 302, potrebbe essere preferibile seguire il reindirizzamento indicato e eseguire il rendering della pagina di autenticazione di Passport HTML anziché consentire a WinHTTP di gestire l'autenticazione internamente. L'autenticazione passport è disabilitata in WinHTTP chiamando la funzione WinHttpSetOption con l'opzione WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH e passando il valore WINHTTP_DISABLE_PASSPORT_AUTH. Può essere riabilitata in un secondo momento con WINHTTP_ENABLE_PASSPORT_AUTH.

L'autenticazione passport non può essere disabilitata quando si usa l'oggetto WinHttpRequest .

Come indicato in precedenza in questa sezione, l'autenticazione passport è disabilitata per impostazione predefinita in WinHTTP 5.1 e deve essere abilitata in modo esplicito con WinHttpSetOption prima dell'uso.

Override della configurazione passport usata per i test

WinHTTP si basa sulle informazioni di configurazione scaricate dal server passport nexus per supportare l'autenticazione passport 1.4. Per impostazione predefinita, questo server SSL (Secure) è nexus.passport.com e la risorsa di configurazione è rdr/pprdr.asp, nota come configurazione del passport "live". Il formato delle informazioni è un'intestazione HTTP personalizzata "PassportURLs", seguita da coppie di attributi delimitate da virgole.

Ad esempio, "https://nexus.passport.com/rdr/pprdr.asp" restituisce le informazioni di configurazione seguenti:

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

Le parti rilevanti per WinHTTP sono DARealm, DALogin e ConfigVersion. Per motivi di prestazioni, vengono memorizzati nella cache per la durata di una sessione WinHTTP. Questi tre valori possono essere sottoposti a override dalle applicazioni necessarie per lavorare con un'altra infrastruttura passport diversa dalla configurazione di produzione "live" modificando le impostazioni appropriate del Registro di sistema in

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

Se LoginServerUrl è presente nel Registro di sistema, WinHTTP non contatta il server nexus per altri valori di configurazione. In questo caso, loginServerRealm e ConfigVersion devono essere impostati anche tramite il Registro di sistema per correggere i valori.

Un'applicazione può, a scopo di test, essere necessaria per scaricare la configurazione del passaporto da un server nexus privato. Questa operazione può essere eseguita eseguendo l'override di due valori del Registro di sistema in

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

Autenticazione in WinHTTP