Passport-Authentifizierung in WinHTTP
Microsoft Windows HTTP Services (WinHTTP) unterstützen die clientseitige Verwendung des Microsoft Passport-Authentifizierungsprotokolls vollständig. Dieses Thema enthält eine Übersicht über die Transaktionen, die an der Passport-Authentifizierung beteiligt sind und wie sie behandelt werden.
Anmerkung
In WinHTTP 5.1 ist die Passport-Authentifizierung standardmäßig deaktiviert.
Passport 1.4
Passport ist eine Kernkomponente der Microsoft .NET-Bausteindienste. Es ermöglicht Unternehmen, verteilte Webdienste über eine breite Palette von Anwendungen hinweg zu entwickeln und anzubieten und ihren Mitgliedern die Verwendung eines Anmeldenamens und eines Kennworts auf allen teilnehmenden Websites zu ermöglichen.
WinHTTP bietet Plattformunterstützung für Microsoft Passport 1.4 durch Implementieren des clientseitigen Protokolls für die Passport 1.4-Authentifizierung. Es befreit Anwendungen aus den Details der Interaktion mit der Passport-Infrastruktur und den gespeicherten Benutzernamen und Kennwörtern in Windows XP. Diese Abstraktion unterscheidet sich von der Verwendung von Passport nicht von der Perspektive eines Entwicklers als der Verwendung herkömmlicher Authentifizierungsschemas wie Basic oder Digest.
Windows XP: Der HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns Registrierungsschlüssel gibt an, wie oft der Passport-Authentifizierungs-Assistent angezeigt wird, wenn die PassPort-Authentifizierung erforderlich ist. Wenn der Wert für diesen Schlüssel auf eine Zahl größer als 5 festgelegt ist, wird der Assistent nicht angezeigt.
In den folgenden Abschnitten werden die Transaktionen beschrieben, die in der Passport-Authentifizierung aus Sicht einer Clientanwendung beteiligt sind. Informationen zur serverseitigen Passport-Entwicklung finden Sie in der Passport SDK-Dokumentation (Übersicht).
Ursprüngliche Anforderung
Wenn ein Client eine Ressource auf einem Server anfordert, der die Passport-Authentifizierung erfordert, überprüft der Server die Anforderung auf das Vorhandensein von Tickets. Wenn ein gültiges Ticket mit der Anforderung gesendet wird, antwortet der Server mit der angeforderten Ressource. Wenn das Ticket nicht auf dem Client vorhanden ist, antwortet der Server mit einem Statuscode 302. Die Antwort enthält den Abfrageheader "WWW-Authenticate: Passport1.4". Clients, die Passport nicht verwenden, können der Umleitung auf den Passport-Anmeldeserver folgen. Komplexere Clients wenden sich in der Regel an den Passport-Nexus, um den Speicherort des Passport-Anmeldeservers zu ermitteln.
Anmerkung
Zentral für das Microsoft Passport-Netzwerk ist das Passport Nexus, das die Synchronisierung von Passport-Teilnehmerstandorten erleichtert, um sicherzustellen, dass jeder Standort über die neuesten Details zur Netzwerkkonfiguration und anderen Problemen verfügt. Jede Passport-Komponente (Passport Manager, Anmeldeserver, Updateserver usw.) kommuniziert regelmäßig mit dem Nexus, um die benötigten Informationen abzurufen und ordnungsgemäß mit den anderen Komponenten im Passport-Netzwerk zu kommunizieren. Diese Informationen werden als XML-Dokument abgerufen, das als Komponentenkonfigurationsdokument oder CCD bezeichnet wird.
Die folgende Abbildung zeigt die anfängliche Anforderung an einen Passport-Partner.
Passport-Anmeldeserver
Ein Passport-Anmeldeserver verarbeitet alle Anforderungen für Tickets für jede Ressource in einer Passport-Domänenzertifizierungsstelle. Bevor eine Anforderung mithilfe von Passport authentifiziert werden kann, muss sich die Clientanwendung an den Anmeldeserver wenden, um die entsprechenden Ticketszu erhalten.
Wenn ein Client Tickets von einem Passport-Anmeldeserver anfordert, antwortet der Anmeldeserver in der Regel mit einem Statuscode von 401, um anzugeben, dass Benutzeranmeldeinformationen angegeben werden müssen. Wenn diese Anmeldeinformationen angegeben werden, antwortet der Anmeldeserver mit den Tickets erforderlich, um auf die angegebene Ressource auf dem Server zuzugreifen, der die ursprünglich angeforderte Ressource enthält. Der Anmeldeserver kann den Client auch an einen anderen Server umleiten, der die angeforderte Ressource bereitstellen kann.
Authentifizierte Anforderung
Wenn der Client über die Tickets verfügt, die einem bestimmten Server entsprechen, sind diese Tickets in allen Anforderungen an diesen Server enthalten. Wenn die Tickets seit dem Abrufen vom Passport-Anmeldeserver nicht geändert wurden, und die Tickets für den Ressourcenserver gültig sind, sendet der Ressourcenserver eine Antwort, die sowohl die angeforderte Ressource als auch Cookies enthält, die angeben, dass der Benutzer für zukünftige Anforderungen authentifiziert ist.
Die zusätzlichen Cookies in der Antwort sollen den Authentifizierungsprozess beschleunigen. Zusätzliche Anforderungen in derselben Sitzung für Ressourcen auf Servern in derselben Passport Domain Authority enthalten alle diese zusätzlichen Cookies. Anmeldeinformationen müssen erst nach Ablauf der Cookies erneut an den Anmeldeserver gesendet werden.
Verwenden von Passport in WinHTTP
Die Passport-Authentifizierung in WinHTTP ähnelt sehr anderen Authentifizierungsschemas. Eine Übersicht über die Authentifizierung in WinHTTP finden Sie unter Authentifizierung in WinHTTP-.
In WinHTTP 5.1 ist die Passport-Authentifizierung standardmäßig deaktiviert und muss vor der Verwendung explizit mit WinHttpSetOption aktiviert sein.
WinHTTP behandelt viele der Transaktionsdetails intern für die Passport-Authentifizierung. Während der anfänglichen Anforderung antwortet der Server mit einem 302-Statuscode, wenn die Authentifizierung erforderlich ist. Der Statuscode 302 gibt tatsächlich eine Umleitung an und ist Teil des Passport-Protokolls zur Abwärtskompatibilität. WinHTTP blendet den 302-Statuscode aus und kontaktiert den Passport-Nexus und dann den Anmeldeserver. Die WinHTTP-Anwendung wird über den Vom Anmeldeserver gesendeten Statuscode 401 benachrichtigt, um Benutzeranmeldeinformationen anzufordern. Für die Anwendung erscheint es jedoch so, als ob der Status 401 vom Server stammt, von dem die Ressource angefordert wurde. Auf diese Weise ist die WinHTTP-Anwendung nicht mit Interaktionen mit anderen Servern vertraut und kann die Passport-Authentifizierung mit demselben Code verarbeiten, der andere Authentifizierungsschemas behandelt.
In der Regel antwortet eine WinHTTP-Anwendung auf einen 401-Statuscode, indem Authentifizierungsanmeldeinformationen angegeben werden. Wenn Anmeldeinformationen mit WinHttpSetCredentials oder SetCredentials für die Passport-Authentifizierung bereitgestellt werden, werden die Anmeldeinformationen tatsächlich an den Anmeldeserver gesendet, nicht an den server, der in der Anforderung angegeben ist.
Wenn sie jedoch auf einen 407-Statuscode reagieren, muss eine WinHTTP-Anwendung WinHttpSetOption- verwenden, um Proxyanmeldeinformationen bereitzustellen, anstatt winHttpSetCredentials. Da WinHttpSetOption- eine weniger sichere Möglichkeit zum Bereitstellen von Anmeldeinformationen ist, sollte sie normalerweise vermieden werden.
Nach dem Abrufen werden Tickets intern verwaltet und automatisch an die entsprechenden Server in zukünftigen Anforderungen gesendet.
Anmerkung
Mit WinHTTP können Sie die automatische Umleitung deaktivieren, indem Sie die WinHttpSetOption--Funktion für das WINHTTP_OPTION_DISABLE_FEATURE Flag aufrufen und einen Wert von WINHTTP_DISABLE_REDIRECTSangeben. Das Deaktivieren der Umleitung beeinträchtigt nicht die Umleitung, die WinHTTP intern für Passport-Transaktionen verarbeitet.
WinHTTP kann die Passport-Authentifizierung erfolgreich abschließen, auch wenn eine Anwendung die automatische Umleitung deaktiviert. Nach Abschluss der Passport-Authentifizierung muss jedoch eine implizite Umleitung von der Passport-Anmeldeserver-URL zurück zur ursprünglichen URL erfolgen. Diese Umleitung wird nicht durch eine 302-HTTP-Antwort ausgelöst, sondern im Passport-Protokoll implizit.
WinHTTP behandelt diese implizite Umleitung speziell. Wenn eine Anwendung die automatische Umleitung deaktiviert hat, erfordert WinHTTP, dass die Anwendung WinHTTP "Berechtigung" erteilt, automatisch in diesem Sonderfall umzuleiten.
Damit WinHTTP nach der Authentifizierung zur ursprünglichen URL zurückleitet, muss die Anwendung eine Rückruffunktion mithilfe WinHttpSetStatusCallback-registrieren. WinHTTP kann die Anwendung dann mit einem WINHTTP_CALLBACK_STATUS_REDIRECT Rückruf benachrichtigen, wodurch die Anwendung die Umleitung abbrechen kann. Eine Anwendung muss keine Funktionalität in der Rückruffunktion bereitstellen; Die Registrierung des Rückrufs reicht aus, um WinHTTP zu aktivieren, um dieser Sonderfallumleitung zu folgen.
Die ERROR_WINHTTP_LOGIN_FAILURE Nachricht wird generiert, wenn keine Rückruffunktion von der Anwendung festgelegt wird.
Passport Cobranding
Im Gegensatz zu herkömmlichen Authentifizierungsschemas, die von WinHTTP unterstützt werden, kann Passport umfassend cobrandedwerden. Nach Erhalt eines 401-Statuscodes, der eine Herausforderung angibt, kann eine Anwendung die cobranding Grafik und Text abrufen. Rufen Sie eine URL für die Cobranding Grafik ab, indem Sie WinHttpQueryOption- mit dem WINHTTP_OPTION_PASSPORT_COBRANDING_URL-Flag aufrufen. Rufen Sie den Cobranding- Text ab, indem Sie WinHttpQueryOption- mit dem WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT-Flag aufrufen. Diese Elemente können verwendet werden, um ein Dialogfeld zum Sammeln von Anmeldeinformationen anzupassen.
Gespeicherte Benutzernamen und Kennwörter
Windows XP hat das Konzept von gespeicherten Benutzernamen und Kennwörtern eingeführt. Wenn die Passport-Anmeldeinformationen eines Benutzers über den Passport-Registrierungs-Assistenten oder das standardmäßige Dialogfeld "Anmeldeinformationen"gespeichert werden, wird er in den gespeicherten Benutzernamen und Kennwörtern gespeichert. Bei Verwendung von WinHTTP unter Windows XP oder höher verwendet WinHTTP automatisch die Anmeldeinformationen in den gespeicherten Benutzernamen und Kennwörtern, wenn anmeldeinformationen nicht explizit festgelegt sind. Dies ähnelt der Unterstützung von Standardanmeldeinformationen für NTLM/Kerberos. Die Verwendung von Standardmäßigen Passport-Anmeldeinformationen unterliegt jedoch nicht den Richtlinieneinstellungen für die automatische Anmeldung.
Deaktivieren der Passport-Authentifizierung
Einige Anwendungen erfordern möglicherweise die Möglichkeit, die Passport-Authentifizierung zu deaktivieren. Wenn beispielsweise ein Passport-Partner mit dem anfänglichen Statuscode 302 antwortet, ist es möglicherweise vorzuziehen, die angegebene Umleitung zu befolgen und die HTML Passport-Authentifizierungsseite zu rendern, anstatt winHTTP die interne Verarbeitung der Authentifizierung zu erlauben. Die Passport-Authentifizierung ist in WinHTTP deaktiviert, indem die WinHttpSetOption--Funktion mit der Option WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH aufgerufen und der Wert WINHTTP_DISABLE_PASSPORT_AUTH übergeben wird. Sie kann später mit WINHTTP_ENABLE_PASSPORT_AUTH erneut aktiviert werden.
Die Passport-Authentifizierung kann nicht deaktiviert werden, wenn das WinHttpRequest-Objekt verwendet wird.
Wie weiter oben in diesem Abschnitt erwähnt, ist die Passport-Authentifizierung in WinHTTP 5.1 standardmäßig deaktiviert und muss vor der Verwendung explizit mit WinHttpSetOption aktiviert werden.
Passport-Konfigurationsüberschreibungen, die für Tests verwendet werden
WinHTTP basiert auf den Konfigurationsinformationen, die er vom Passport-Nexus-Server herunterlädt, um die Passport 1.4-Authentifizierung zu unterstützen. Standardmäßig ist dieser sichere (SSL)-Server nexus.passport.com, und die Konfigurationsressource ist rdr/pprdr.asp, der als "live"-Passport-Konfiguration bezeichnet wird. Das Format der Informationen ist ein benutzerdefinierter HTTP-Header "PassportURLs", gefolgt von kommagetrennten Attributwert-Paaren.
Beispiel: "https://nexus.passport.com/rdr/pprdr.asp" gibt die folgenden Konfigurationsinformationen zurück:
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
Die für WinHTTP relevanten Teile sind DARealm, DALogin und ConfigVersion. Aus Leistungsgründen werden sie für die Lebensdauer einer WinHTTP-Sitzung zwischengespeichert. Diese drei Werte können von Anwendungen außer Kraft gesetzt werden, die für die Arbeit mit einer anderen Passport-Infrastruktur als dem "Live"-Produktionssetup erforderlich sind, indem die entsprechenden Registrierungseinstellungen unter
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
Wenn LoginServerUrl in der Registrierung vorhanden ist, kontaktiert WinHTTP nicht den Nexus-Server für andere Konfigurationswerte. In diesem Fall sollte LoginServerRealm und ConfigVersion auch über die Registrierung festgelegt werden, um Werte zu korrigieren.
Eine Anwendung kann zu Testzwecken erforderlich sein, um die Passport-Konfiguration von einem privaten Nexus-Server herunterzuladen. Dies kann durch Außerkraftsetzung von zwei Registrierungswerten unter
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
Verwandte Themen