Platform SDK: DirectX |
セキュア セッションは、認証されたユーザーのみが参加可能なセッションである。これは、パスワードによる保護とは異なる。認証では、ユーザーがサーバーの管理者によってメンバシップ データベースに追加されているかどうかに基づいて、そのユーザーにサーバーへのアクセスが許可されているかどうかを判断する。セッションへの参加を許可されるのは、メンバシップ データベースに含まれているユーザーだけである。パスワードは、セキュア セッションであるかどうかに関係なく、任意のセッションに追加することができる。セキュア セッションをホストできるのは認証をサポートするコンピュータだけであるが、セッションにパスワードを追加するのはどのコンピュータでも可能である。
DirectPlay のセキュア セッションを作成するには、サーバー アプリケーションが、IDirectPlay4::Open または IDirectPlay4::SecureOpen に渡す DPSESSIONDESC2 構造体で、DPSESSION_SECURESERVER フラグを設定するだけでよい。Open を使用すると、デフォルトのセキュリティ パッケージを使用し、クライアントがセッションに参加したときには認証を要求しないセッションを作成することができる。
DirectPlay アプリケーションは、セッションを作成するときに SecureOpen メソッドを呼び出し、使用するプロバイダを DPSECURITYDESC 構造体で指定することにより、別のプロバイダを選択することができる。ユーザーおよびメッセージの認証に使用する SSPI プロバイダが異なる場合、アプリケーションは DPSECURITYDESC 構造体の lpszSSPIProvider メンバにプロバイダの名前を指定する必要がある。メッセージのプライバシに使用する CryptoAPI プロバイダが異なる場合は、プロバイダの名前、タイプ、および暗号化アルゴリズムを、それぞれ lpszCAPIProvider、dwCAPIProviderType、および dwEncryptionAlgorithm メンバに指定する必要がある。
クライアントがこのセッションを列挙すると、IDirectPlay4::EnumSessions によって返される DPSESSIONDESC2 構造体で DPSESSION_SECURESERVER フラグが設定される。このフラグはクライアントに対し、セッションに参加するためには、認証用の信用証明が必要であることを伝える。クライアントが IDirectPlay4::Open を使用してセッションへの参加を試みると、そのユーザーの信用証明がシステムへのログ オンを通して既に確立されていれば、セキュリティ パッケージによりユーザーの参加が許可される場合がある。それ以外の場合は、DPERR_LOGONDENIED エラーが返される。その場合、アプリケーションはユーザーから信用証明を収集し、それを DPCREDENTIALS 構造体に格納し、その構造体を渡して IDirectPlay4::SecureOpen を呼び出して、セッションへの参加を再度試みる必要がある。セキュリティ上の理由により、SecureOpen が推奨されている。
DirectPlay のセキュア セッションを作成するには、サーバー アプリケーションが、DirectPlay4.Open または DirectPlay4.SecureOpen に渡す DirectPlaySessionData オブジェクトで、DPSESSION_SECURESERVER フラグを設定するだけでよい。Open を使用すると、デフォルトのセキュリティ パッケージを使用し、クライアントがセッションに参加したときには認証を要求しないセッションを作成することができる。
DirectPlay アプリケーションは、セッションを作成するときに SecureOpen メソッドを呼び出し、使用するプロバイダを DPSECURITYDESC 型に指定することにより、別のプロバイダを選択することができる。ユーザーおよびメッセージの認証に使用する SSPI プロバイダが異なる場合、アプリケーションは DPSECURITYDESC 型の strSSPIProvider メンバにプロバイダの名前を指定する必要がある。メッセージのプライバシに使用する CryptoAPI プロバイダが異なる場合は、プロバイダの名前、タイプ、および暗号化アルゴリズムを、それぞれ strCAPIProvider、lCAPIProviderType、および lEncryptionAlgorithm メンバに指定する必要がある。
クライアントがこのセッションを列挙すると、DirectPlayEnumSessions.GetItem によって返される DirectPlaySessionData オブジェクトで DPSESSION_SECURESERVER フラグが設定される。このフラグはクライアントに対し、セッションに参加するためには、認証用の信用証明が必要であることを伝える。クライアントが DirectPlay4.Open を使用してセッションへの参加を試みると、そのユーザーの信用証明がシステムへのログ オンを通して既に確立されていれば、セキュリティ パッケージによりユーザーの参加が許可される場合がある。それ以外の場合は、DPERR_LOGONDENIED エラーが返される。その場合、アプリケーションはユーザーから信用証明を収集し、それを DPCREDENTIALS 型に格納し、それを渡して DirectPlay4.SecureOpen を呼び出して、セッションへの参加を再度試みる必要がある。
セキュア セッションでは、DirectPlay のシステム メッセージには、送信側の身元がわかるように、すべてデジタル署名が施される。重要な情報を運ぶ一部のシステム メッセージは、暗号化される。あるプレーヤーから発生し、セッション内のほかのすべてのプレーヤーにブロードキャストしなければならないシステム メッセージは、まずサーバーに送信される。サーバーは、自らの署名をメッセージに加えて、そのメッセージをセッション内のほかのすべてのコンピュータに送信する。デフォルトでは、プレーヤー対プレーヤーのメッセージには署名は加えられず、サーバーも経由しない。
アプリケーションは、メッセージの送信時に DPSEND_SIGNED フラグまたは DPSEND_ENCRYPTED フラグを設定して、プレーヤー対プレーヤーのメッセージに署名するか、または暗号化するかを選択することができる。署名されたメッセージと暗号化されたメッセージは、サーバーを経由し、セキュアなシステム メッセージとして届けられる。プレーヤーがセキュアなメッセージを受信すると、署名が加えられているか、または暗号化されているかを示すフラグがメッセージに含まれている。確認処理をパスしないメッセージは、破棄される。