WinHTTP での Passport 認証
Microsoft Windows HTTP Services (WinHTTP) は、Microsoft Passport 認証プロトコルのクライアント側の使用を完全にサポートします。 このトピックでは、Passport 認証に関連するトランザクションとその処理方法の概要について説明します。
手記
WinHTTP 5.1 では、Passport 認証は既定で無効になっています。
Passport 1.4
Passport は、Microsoft .NET 文書パーツ サービスのコア コンポーネントです。 これにより、企業は幅広いアプリケーションで分散 Web サービスを開発および提供でき、メンバーはすべての参加 Web サイトで 1 つのサインイン名とパスワードを使用できます。
WinHTTP は、Passport 1.4 認証用のクライアント側プロトコルを実装することで、Microsoft 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 開発については、Passport SDK ドキュメントの概要を参照してください。
- 初期要求 の
- Passport Login Server
- 認証された要求 の
初期要求
クライアントが Passport 認証を必要とするサーバー上のリソースを要求すると、サーバーは要求 チケットが存在することを確認します。 有効な チケット が要求と共に送信されると、サーバーは要求されたリソースで応答します。 チケット がクライアントに存在しない場合、サーバーは 302 状態コードで応答します。 応答には、チャレンジ ヘッダー "WWW-Authenticate: Passport1.4" が含まれます。 Passport を使用していないクライアントは、Passport ログイン サーバーへのリダイレクトに従うことができます。 より高度なクライアントは、通常、Passport のネクサスに連絡して、Passport ログイン サーバーの場所を決定します。
手記
Microsoft Passport ネットワークの中心となるのは Passport Nexusです。Passport 参加者サイトの同期が容易になり、各サイトにネットワーク構成やその他の問題に関する最新の詳細が確実に得られます。 各 Passport コンポーネント (Passport Manager、ログイン サーバー、更新サーバーなど) は、定期的に Nexus と通信して、Passport ネットワーク内の他のコンポーネントを特定し、適切に通信するために必要な情報を取得します。 この情報は、コンポーネント構成ドキュメント (CCD) と呼ばれる XML ドキュメントとして取得されます。
次の図は、Passport アフィリエイトへの最初の要求を示しています。
Passport Login Server
Passport ログイン サーバーは、Passport ドメイン機関内のリソースに対してチケットのすべての要求を処理します。 Passport を使用して要求を認証するには、クライアント アプリケーションがログイン サーバーに接続して、適切なチケットを取得する必要があります。
クライアントが Passport ログイン サーバーからチケットを要求すると、ログイン サーバーは通常、ユーザー資格情報を指定する必要があることを示す 401 状態コードで応答します。 これらの資格情報が指定されると、ログイン サーバーは、最初に要求されたリソースを含むサーバー上の指定されたリソースにアクセスするために必要な チケットで応答します。 ログイン サーバーは、要求されたリソースを提供できる別のサーバーにクライアントをリダイレクトすることもできます。
認証済み要求
クライアントに特定のサーバーに対応する チケット がある場合、それらの チケット はそのサーバーに対するすべての要求に含まれます。 チケット Passport ログイン サーバーから取得されてから変更されておらず、チケット がリソース サーバーに対して有効な場合、リソース サーバーは、要求されたリソースと、ユーザーが今後の要求に対して認証されることを示す Cookie の両方を含む応答を送信します。
応答内の追加の Cookie は、認証プロセスを高速化することを目的としています。 同じ Passport Domain Authority 内のサーバー上のリソースに対する同じセッション内の追加の要求には、これらの追加の Cookie が含まれます。 Cookie の有効期限が切れるまで、資格情報をログイン サーバーに再度送信する必要はありません。
WinHTTP での Passport の使用
WinHTTP でのパスポート認証は、他の認証スキームとよく似ています。 WinHTTP での認証の概要については、WinHTTP での認証の に関するページを参照してください。
WinHTTP 5.1 では、Passport 認証は既定で無効になっており、WinHttpSetOption を使用する前に明示的に有効にする必要があります。
WinHTTP は、Passport 認証のためにトランザクションの詳細の多くを内部的に処理します。 最初の要求中、認証が必要な場合、サーバーは 302 状態コードで応答します。 302 状態コードは実際にはリダイレクトを示し、下位互換性のための Passport プロトコルの一部です。 WinHTTP は、302 状態コードを非表示にし、Passport ネクサスとログイン サーバーに接続します。 WinHTTP アプリケーションには、ユーザー資格情報を要求するためにログイン サーバーによって送信された 401 状態コードが通知されます。 ただし、アプリケーションでは、リソースが要求されたサーバーから 401 状態が発生したかのように表示されます。 このように、WinHTTP アプリケーションは他のサーバーとの対話を認識せずに、他の認証スキームを処理するのと同じコードで Passport 認証を処理できます。
通常、WinHTTP アプリケーションは、認証資格情報を指定して 401 状態コードに応答します。 資格情報が、WinHttpSetCredentials または SetCredentials でパスポート認証用に指定されている場合、資格情報は、要求で指定されたサーバーではなく、ログイン サーバーに実際に送信されます。
ただし、407 状態コードに応答する場合、WinHTTP アプリケーションでは、WinHttpSetCredentialsではなく、WinHttpSetOption を使用してプロキシ資格情報を提供する必要があります。 WinHttpSetOption は資格情報を提供する安全性の低い方法であるため、通常は避ける必要があります。
取得されると、チケット は内部的に管理され、今後の要求で該当するサーバーに自動的に送信されます。
手記
WinHTTP では、WINHTTP_OPTION_DISABLE_FEATURE フラグの WinHttpSetOption 関数を呼び出し、WINHTTP_DISABLE_REDIRECTSの値を指定することで、自動リダイレクトを無効にすることができます。 リダイレクトを無効にしても、WinHTTP が Passport トランザクションに対して内部的に処理するリダイレクトに干渉することはありません。
WinHTTP は、アプリケーションが自動リダイレクトを無効にした場合でも、Passport 認証を正常に完了できます。 ただし、Passport 認証が完了したら、Passport ログイン サーバーの URL から元の URL に暗黙的なリダイレクトを行う必要があります。 このリダイレクトは 302 HTTP 応答によってトリガーされませんが、Passport プロトコルでは暗黙的です。
WinHTTP は、この暗黙的なリダイレクトを特別に処理します。 アプリケーションで自動リダイレクトが無効になっている場合、WinHTTP では、この特殊なケースで自動的にリダイレクトするために、アプリケーションに WinHTTP の "アクセス許可" を付与する必要があります。
認証後に WinHTTP を元の URL にリダイレクトし直すには、アプリケーションで WinHttpSetStatusCallbackを使用してコールバック関数を登録する必要があります。 WinHTTP は、WINHTTP_CALLBACK_STATUS_REDIRECTコールバックを使用してアプリケーションに通知できます。これにより、アプリケーションはリダイレクトを取り消すことができます。 アプリケーションはコールバック関数の機能を提供する必要はありません。コールバックの登録は、WinHTTP がこの特殊なケースのリダイレクトに従えるようにするのに十分です。
コールバック関数がアプリケーションによって設定されていない場合、ERROR_WINHTTP_LOGIN_FAILURE メッセージが生成されます。
Passport Cobranding
WinHTTP でサポートされている従来の認証スキームとは異なり、Passport はブランド化広く使用できます。 チャレンジを示す 401 状態コードを受け取ると、アプリケーションはグラフィックとテキスト のブランド化を取得できます。 WINHTTP_OPTION_PASSPORT_COBRANDING_URL フラグを指定して WinHttpQueryOption呼び出して、cobranding グラフィックの URL を取得します。 WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT フラグを指定して WinHttpQueryOption呼び出して、のブランド化 テキストを取得します。 これらの項目を使用して、資格情報収集ダイアログをカスタマイズできます。
保存されているユーザー名とパスワード
Windows XP では、保存されているユーザー名とパスワードの概念が導入されました。 Passport 登録ウィザードの または標準の 資格情報ダイアログを使用してユーザーの Passport 資格情報を保存すると、保存されたユーザー名とパスワードに保存されます。 Windows XP 以降で WinHTTP を使用する場合、資格情報が明示的に設定されていない場合、WinHTTP は保存されているユーザー名とパスワードの資格情報を自動的に使用します。 これは、NTLM/Kerberos の既定のログオン資格情報のサポートに似ています。 ただし、既定の Passport 資格情報の使用は、自動ログオン ポリシー設定の対象になりません。
Passport 認証の無効化
一部のアプリケーションでは、Passport 認証を無効にする機能が必要になる場合があります。 たとえば、Passport アフィリエイトが最初の 302 状態コードで応答する場合は、WinHTTP が内部的に認証を処理できるようにするのではなく、指定されたリダイレクトに従って HTML Passport 認証ページをレンダリングすることをお勧めします。 WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH オプションを使用して WinHttpSetOption 関数を呼び出し、値をWINHTTP_DISABLE_PASSPORT_AUTH渡すことで、WinHTTP でパスポート認証が無効になります。 後で WINHTTP_ENABLE_PASSPORT_AUTH で再び有効にすることができます。
WinHttpRequest オブジェクトを使用する場合、Passport 認証を無効にすることはできません。
このセクションで前述したように、Passport 認証は WinHTTP 5.1 では既定で無効になっており、使用する前に WinHttpSetOption明示的に有効にする必要があります。
テストに使用される Passport 構成のオーバーライド
WinHTTP は、Passport 1.4 認証をサポートするために、Passport Nexus サーバーからダウンロードする構成情報に依存します。 既定では、このセキュリティで保護された (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 セッションの有効期間中はキャッシュされます。 これらの 3 つの値は、次の下の適切なレジストリ設定を変更することで、"ライブ" 運用セットアップ以外の別のパスポート インフラストラクチャを操作するために必要なアプリケーションによってオーバーライドできます。
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 は他の構成値についてネクサス サーバーに接続しません。 この場合、LoginServerRealm と ConfigVersion もレジストリを使用して値を修正するように設定する必要があります。
アプリケーションは、テスト目的で、プライベート ネクサス サーバーからパスポート構成をダウンロードする必要がある場合があります。 これは、次の 2 つのレジストリ値をオーバーライドすることで実行できます。
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 での認証の