1

(IOCPを使用して)http.sysベースのサーバーにシングルサインオンを実装しようとしていますが、AcceptSecurityContextで奇妙な問題が発生し、SEC_E_LOGON_DENIEDでランダムに失敗します。

同じクライアントマシンから同じサーバーマシンに接続すると(約50%の確率で)、http接続が1つしかないクライアントが1つしかない場合でも、ランダムにエラーが発生します。両方のマシンは同じドメインにあり、どちらもドメインコントローラーではありません。

失敗した呼び出しは、チャレンジ/レスポンスシーケンスの2番目(そして最後)の呼び出しであり、最初の呼び出しは常に成功します。

AcceptSecurityContext呼び出しの前にIDEにブレークポイントがある場合(他に何も変更されていない場合)、認証は常に成功します(テストできる限り)。

タイミングの問題を疑って、呼び出しの前にSleep()を配置しましたが、成功率は向上しませんでした。

また、httpサーバーが実行されているのと同じマシンから接続する場合、認証は常に成功します。

クライアントブラウザ(IEとChrome)に関係なく、動作は同じです。

何か案は?

4

1 に答える 1

1

問題が見つかり、解決されました。これは、base64データのデコードの問題に関連しており、1文字('+')が誤ってスペース''に変換されたため、その文字が存在する場合にのみ問題が発生しました。

デバッガブレークポイントが設定されたとき、またはローカル接続から発生しなかった理由は不明ですが...おそらくそこに格納されているタイミング要素があります。

于 2012-12-12T08:34:49.497 に答える