HTTP_REQUEST_AUTH_INFO 構造体 (http.h)
HTTP_REQUEST_AUTH_INFO構造体には、要求の認証状態と、受信側のプロセスが認証されたクライアントの偽装に使用できるクライアント トークンへのハンドルが含まれています。
この構造体は、 HTTP_REQUEST_INFO 構造体に含まれています。
構文
typedef struct _HTTP_REQUEST_AUTH_INFO {
HTTP_AUTH_STATUS AuthStatus;
SECURITY_STATUS SecStatus;
ULONG Flags;
HTTP_REQUEST_AUTH_TYPE AuthType;
HANDLE AccessToken;
ULONG ContextAttributes;
ULONG PackedContextLength;
ULONG PackedContextType;
PVOID PackedContext;
ULONG MutualAuthDataLength;
PCHAR pMutualAuthData;
USHORT PackageNameLength;
PWSTR pPackageName;
} HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO;
メンバー
AuthStatus
要求の最終的な認証状態を示す HTTP_AUTH_STATUS 列挙体のメンバー。
認証の状態が HttpAuthStatusSuccess でない場合、アプリケーションは AuthStatus、SecStatus、AuthType を除き、この構造体のメンバーを無視する必要があります。
SecStatus
AuthStatus メンバーが HttpAuthStatusFailure の場合のセキュリティ エラーの状態を示すSECURITY_STATUS値。
Flags
次の認証属性を示す認証フラグ。
属性 | 説明 |
---|---|
|
指定されたトークンは NTLM 用であり、Keep Alive (KA) 接続のキャッシュされた資格情報に基づいています。 |
AuthType
要求に対して試行または確立された認証スキームを示す HTTP_REQUEST_AUTH_TYPE 列挙体のメンバー。
AccessToken
認証されたクライアントを偽装するために受信プロセスが使用できるクライアント トークンのハンドル。
トークンのハンドルは、必要なくなったときに CloseHandle を呼び出して閉じる必要があります。 このトークンは、要求の有効期間中のみ有効です。 アプリケーションは、トークンの有効期限が切れたときに、最初の 401 チャレンジを再生成して再認証できます。
ContextAttributes
アクセス トークンのクライアント コンテキスト属性。
PackedContextLength
PackedContext の長さ (バイト単位)。
PackedContextType
PackedContext メンバー内のコンテキストの型。
PackedContext
認証の種類のセキュリティ コンテキスト。
アプリケーションは、SSPI QueryContextAttributes API を呼び出すことによって、パックされたコンテキストの属性に対してクエリを実行できます。 ただし、アプリケーションは、指定された AuthType のセキュリティ パッケージの資格情報ハンドルを取得する必要があります。
シリアル化されたコンテキストが不要になったときに、アプリケーションは SSPI FreeContextBuffer API を呼び出して解放する必要があります。
MutualAuthDataLength
pMutualAuthData メンバーの長さ (バイト単位)。
pMutualAuthData
WWW-Authenticate ヘッダーで使用される Base64 でエンコードされた相互認証データ。
PackageNameLength
pPackageName
注釈
HTTP バージョン 2.0 以降では、 HTTP_REQUEST 構造体には HTTP_REQUEST_INFO 構造体が含まれています。 要求情報の種類が HttpRequestInfoTypeAuth の場合、HTTP_REQUEST_INFO構造体の pVoid メンバーはHTTP_REQUEST_AUTH_INFOを指します。
アプリケーションは、この構造体を使用して要求を受信し、要求が認証されていない場合、 HTTP_MULTIPLE_KNOWN_HEADERS構造体内 の必要な WWW-Authenticate ヘッダーのセットを使用して、最初の 401 チャレンジを送信できます。 HTTP Server API は、認証ハンドシェイクを完了すると、 HTTP_REQUEST_AUTH_INFO 構造を満たし、要求を再度アプリケーションに渡します。 クライアント ID を表すアクセス トークンへのハンドルは、HTTP Server API によってこの構造で提供されます。
コンテキスト属性
ContextAttributes メンバーは、SSPI ベースのスキームに対して提供されます。 たとえば、SSPI アプリケーションは、相互に認証されたセッション に対してASC_RET_MUTUAL_AUTH が設定されているかどうかを判断できます。
HTTP Server API では、 PackedContext メンバー内のコンテキストの有効期限は提供されません。 アプリケーションでは、NTLM 資格情報のキャッシュが有効になっている場合や、キャッシュされたコンテキストの有効期限を照会する場合など、特定の状況で有効期限が必要になる場合があります。 サーバー アプリケーションがアクセス トークンに関連付けられている基になるクライアント コンテキストの有効期限を必要とする場合は、パックされたコンテキストを受け取り、SECPKG_ATTR_LIFESPANを使用して QueryContextAttributes を呼び出すことができます。
相互認証データ
既定では、HTTP Server API によって、相互認証データが最終的な 200 応答に確実に追加されます。一般に、サーバー アプリケーションは相互認証データを送信する責任を負いません。
ただし、アプリケーションは相互認証データを受け取り、最終的な応答で送信できます。 HTTP_SERVER_AUTHENTICATION_INFO構造体の ReceiveMutualAuth メンバーが true に設定されている場合、アプリケーションは認証された要求と共に相互認証のサーバー資格情報を受け取ります。
pMutualAuthData メンバーで提供される相互認証データには、ヘッダー名のない WWW-Authenticate ヘッダーの正確な値が含まれています。 たとえば、 pMutualAuthData は "Negotiate ade02938481eca" を指しています。 アプリケーションは、指定された pMutualAuthData を応答ヘッダー値として追加して、WWW-Authenticate ヘッダーをビルドします。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
Header | http.h |