Поделиться через


Проверка подлинности паспорта в WinHTTP

Microsoft Windows HTTP Services (WinHTTP) полностью поддерживает использование клиентского протокола проверки подлинности Microsoft Passport. В этом разделе представлен обзор транзакций, участвующих в проверке подлинности Passport, и их обработке.

Заметка

В WinHTTP 5.1 проверка подлинности Passport отключена по умолчанию.

 

Passport 1.4

Passport — это основной компонент служб стандартных блоков Microsoft .NET. Он позволяет предприятиям разрабатывать и предлагать распределенные веб-службы в широком спектре приложений и позволяет своим членам использовать одно имя входа и пароль на всех участвующих веб-сайтах.

WinHTTP обеспечивает поддержку платформы для Microsoft Passport 1.4 путем реализации клиентского протокола для проверки подлинности Passport 1.4. Он освобождает приложения от сведений о взаимодействии с инфраструктурой Passport и сохраненными именами пользователей и паролями в Windows XP. Эта абстракция делает использование Passport не отличается от перспективы разработчика, чем использование традиционных схем проверки подлинности, таких как Basic или Digest.

Windows XP: раздел реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns идентифицирует количество операций проверки подлинности Passport, когда требуется проверка подлинности PassPort. Если для этого ключа задано значение больше 5, мастер не отображается.

В следующих разделах описаны транзакции, связанные с проверкой подлинности Passport с точки зрения клиентского приложения. Сведения о разработке passport на стороне сервера см. в документации по пакету SDK для Passport.

Начальный запрос

Когда клиент запрашивает ресурс на сервере, которому требуется проверка подлинности Passport, сервер проверяет наличие билетов. Если действительный билет отправляется с запросом, сервер отвечает с запрошенным ресурсом. Если билет не существует на клиенте, сервер отвечает с кодом состояния 302. Ответ включает заголовок запроса "WWW-Authenticate: Passport1.4". Клиенты, не использующие Passport, могут следовать перенаправлению на сервер входа Passport. Более сложные клиенты обычно обращаются к Passport nexus, чтобы определить расположение сервера входа Passport.

Заметка

Центральное место в сети Microsoft Passport — это Nexus, что упрощает синхронизацию сайтов участников Passport, чтобы гарантировать, что каждый сайт содержит последние сведения о конфигурации сети и других проблемах. Каждый компонент Passport (Passport Manager, серверы входа, обновления серверов и т. д.) периодически взаимодействует с Nexus для получения информации, с которыми она должна находиться, и правильно взаимодействовать с другими компонентами в сети Passport. Эти сведения извлекаются в виде XML-документа, называемого документом конфигурации компонента или CCD.

 

На следующем рисунке показан первоначальный запрос к филиалу Passport.

изображении отображается первоначальный запрос к партнеру по паспорту.

Сервер входа Passport

Сервер входа Passport обрабатывает все запросы билетов для любого ресурса в центр домена Passport . Перед проверкой подлинности запроса с помощью Passport клиентское приложение должно связаться с сервером входа, чтобы получить соответствующие билеты.

Когда клиент запрашивает билеты с сервера входа Passport, сервер входа обычно отвечает с кодом состояния 401, чтобы указать, что учетные данные пользователя должны быть предоставлены. Если эти учетные данные предоставлены, сервер входа отвечает на запросы , необходимые для доступа к указанному ресурсу на сервере, который содержит исходный запрошенный ресурс. Сервер входа также может перенаправить клиент на другой сервер, который может предоставить запрошенный ресурс.

на изображении показан запрос на запрос клиента на сервер входа в паспорт.

Запрос, прошедший проверку подлинности

Если клиент имеет билеты, соответствующие заданному серверу, эти билеты включены со всеми запросами на этот сервер. Если билетов не были изменены, так как они были получены с сервера входа Passport, а билеты действительны для сервера ресурсов, сервер ресурсов отправляет ответ, включающий как запрошенный ресурс, так и файлы cookie, указывающие, что пользователь прошел проверку подлинности для будущих запросов.

Дополнительные файлы cookie в ответе предназначены для ускорения процесса проверки подлинности. Дополнительные запросы в том же сеансе для ресурсов на серверах в одном и том же органе домена Passport включают эти дополнительные файлы cookie. Учетные данные не нужно отправлять на сервер входа еще раз до истечения срока действия файлов cookie.

на изображении показан прошедший проверку подлинности запрос на сервер входа в passport.

Использование Passport в WinHTTP

Проверка подлинности passport в WinHTTP очень похожа на другие схемы проверки подлинности. Общие сведения о проверке подлинности в WinHTTP см. в WinHTTP.

В WinHTTP 5.1 проверка подлинности Passport отключена по умолчанию и должна быть явно включена с WinHttpSetOption перед использованием.

WinHTTP обрабатывает многие сведения о транзакциях внутренне для проверки подлинности Passport. Во время первоначального запроса сервер отвечает с кодом состояния 302 при необходимости проверки подлинности. Код состояния 302 фактически указывает перенаправление и является частью протокола Passport для обратной совместимости. WinHTTP скрывает код состояния 302 и связывается с приложением Passport nexus, а затем сервером входа. Приложение WinHTTP уведомляется о коде состояния 401, отправленном сервером входа для запроса учетных данных пользователя. Однако приложению кажется, что состояние 401 исходит от сервера, с которого был запрошен ресурс. Таким образом, приложение WinHTTP не знает о взаимодействии с другими серверами и может обрабатывать проверку подлинности Passport с тем же кодом, который обрабатывает другие схемы проверки подлинности.

Как правило, приложение WinHTTP реагирует на код состояния 401 путем предоставления учетных данных проверки подлинности. Если учетные данные предоставляются с WinHttpSetCredentials или SetCredentials для проверки подлинности паспорта, учетные данные фактически отправляются на сервер входа, а не на сервер, указанный в запросе.

Однако при ответе на код состояния 407 приложение WinHTTP должно использовать WinHttpSetOption для предоставления учетных данных прокси-сервера, а не WinHttpSetCredentials. Так как WinHttpSetOption является менее безопасным способом предоставления учетных данных, его следует избегать.

После получения билетов управляются внутренне и автоматически отправляются на применимые серверы в будущих запросах.

Заметка

WinHTTP позволяет отключить автоматическое перенаправление, вызвав функцию WinHttpSetOp tion для флага WINHTTP_OPTION_DISABLE_FEATURE и указав значение WINHTTP_DISABLE_REDIRECTS. Отключение перенаправления не препятствует перенаправлению, которое WinHTTP обрабатывает внутренне для транзакций Passport.

 

WinHTTP может успешно завершить проверку подлинности Passport, даже если приложение отключает автоматическое перенаправление. Однако после завершения проверки подлинности Passport неявное перенаправление должно происходить с URL-адреса сервера входа Passport обратно в исходный URL-адрес. Это перенаправление не активируется http-ответом 302, но неявно в протоколе Passport.

WinHTTP специально обрабатывает это неявное перенаправление. Если приложение отключило автоматическое перенаправление, WinHTTP требует, чтобы приложение предоставило WinHTTP "разрешение" для автоматического перенаправления в этом специальном случае.

Чтобы выполнить перенаправление WinHTTP обратно на исходный URL-адрес после проверки подлинности, приложение должно зарегистрировать функцию обратного вызова с помощью WinHttpSetStatusCallback. Затем WinHTTP может уведомить приложение с помощью обратного вызова WINHTTP_CALLBACK_STATUS_REDIRECT, что позволяет приложению отменить перенаправление. Приложению не требуется предоставлять какие-либо функции в функции обратного вызова; регистрация обратного вызова достаточно, чтобы включить WinHTTP для выполнения этого перенаправления в особый случай.

Сообщение ERROR_WINHTTP_LOGIN_FAILURE создается, если функция обратного вызова не задана приложением.

Passport Cobranding

В отличие от традиционных схем проверки подлинности, поддерживаемых WinHTTP, Passport может быть широко cobranded. Получив код состояния 401, указывающий на проблему, приложение может получить cobranding графических и текстовых элементов. Получите URL-адрес для графического элемента cobranding путем вызова WinHttpQueryOption с флагом WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Получите текст, вызвав WinHttpQueryOption с флагом WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT. Эти элементы можно использовать для настройки диалогового окна сбора учетных данных.

Сохраненные имена пользователей и пароли

Windows XP представила концепцию сохраненных имен пользователей и паролей. Если учетные данные паспорта пользователя сохраняются с помощью мастера регистрации passport или стандартного диалогового окна учетных данных, он сохраняется в сохраненных именах пользователей и паролях. При использовании WinHTTP в Windows XP или более поздней версии WinHTTP автоматически использует учетные данные в сохраненных именах пользователей и паролях, если учетные данные не заданы явным образом. Это аналогично поддержке учетных данных входа по умолчанию для NTLM/Kerberos. Однако использование учетных данных Passport по умолчанию не распространяется на параметры политики автоматического входа.

Отключение проверки подлинности passport

Для некоторых приложений может потребоваться возможность отключить проверку подлинности Passport. Например, если филиал Passport отвечает с исходным кодом состояния 302, возможно, предпочтительнее следовать указанному перенаправлению и отображать страницу проверки подлинности HTML Passport, а не разрешить WinHTTP обрабатывать проверку подлинности внутренне. Проверка подлинности по паспорту отключена в WinHTTP путем вызова функции WinHttpSetOp tion с параметром WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH и передачей значения WINHTTP_DISABLE_PASSPORT_AUTH. Позже его можно повторно включить с помощью WINHTTP_ENABLE_PASSPORT_AUTH.

Проверка подлинности passport не может быть отключена при использовании объекта WinHttpRequest.

Как отмечалось ранее в этом разделе, проверка подлинности Passport отключена по умолчанию в WinHTTP 5.1 и должна быть явно включена с WinHttpSetOption перед использованием.

Переопределения конфигурации паспорта, используемые для тестирования

WinHTTP использует сведения о конфигурации, которые он загружает с сервера passport nexus для поддержки проверки подлинности Passport 1.4. По умолчанию этот защищенный (SSL) сервер nexus.passport.com, а ресурс конфигурации — rdr/pprdr.asp, который называется "динамической" конфигурацией паспорта. Формат сведений — это настраиваемый заголовок HTTP PassportURLs, за которым следует пары атрибутов с разделителями-запятыми.

Например, "https://nexus.passport.com/rdr/pprdr.asp" возвращает следующие сведения о конфигурации:

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

Компоненты, относящиеся к WinHTTP, — DARealm, DALogin и ConfigVersion. По соображениям производительности они кэшируются в течение всего времени существования сеанса WinHTTP. Эти три значения можно переопределить приложениями, которые необходимы для работы с другой инфраструктурой паспортов, отличной от рабочей установки live, изменив соответствующие параметры реестра в разделе

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

Если LoginServerUrl присутствует в реестре, WinHTTP не обращается к серверу nexus для других значений конфигурации. В этом случае имя loginServerRealm и ConfigVersion также должно быть задано в реестре для исправления значений.

Приложение может потребоваться для тестирования, чтобы скачать конфигурацию паспорта с частного сервера nexus. Это можно сделать, переопределив два значения реестра в разделе

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

проверка подлинности в WinHTTP