HTTPダイジェスト認証を使用するサーバーと通信するアプリがあります。
iPhone内の「セッション」管理は、私たちの開発者にとってはかなり「ブラックボックス」のように思えます。フレームワークがhttpセッションをどのように処理/永続化するかがわからないというのは本当ですか?
私がここで薄暗いだけの場合、誰かがiPhoneでHTTPダイジェスト認証を処理する方法を説明してくれるでしょうか?
私の基本的な実行は次のとおりです。
- 安全なURLにリクエストを送信します
- サーバーは401を送信します
- クライアントはクレデンシャルを作成して保持し、それをサーバーに返します
- サーバーは資格情報を検証し、検証された場合は要求を完了し、検証されなかった場合は別の401を送信します。
- URLを保護するために後続のリクエストを行います
- サーバーが再度認証を要求します.......。
これは単一のリクエストで機能しますが、追加の後続のリクエストを行うと、サーバーは再度承認をリクエストします。サーバーは特定のユーザーのセッションを永続化していますが、iPhoneは何らかの理由で同じセッション内で要求を行っていません...したがって、サーバーは認証オブジェクトを破棄し、クライアントごとに新しい認証オブジェクトを作成する必要があります保護されたURLにリクエストを送信します。
これは正しい動作ではないと確信しています。
この状況でブラウザがどのように動作するかを見ると、次のようになります。
- ブラウザが安全なURLからデータを要求する
- サーバーは401を送信します
- ブラウザはユーザーに資格情報の入力を求め、それを保持し、サーバーに渡します
- サーバーは資格情報を検証し、検証された場合はデータを返し、そうでない場合は別の401を送信します。
- ブラウザがセッションを管理しているため、URLを保護するために行われた後続の要求では、資格情報の入力は求められません。
NSURLCredentialを作成し、NSURLCrendtialStorage内に永続化しています。次に、アプリが「didReceiveAuthenticationChallenge」を受信すると、ストレージからクレデンシャルを取得して返し、クレデンシャルが存在しない場合は作成します(最初のリクエストで)。
どんな助けでも大歓迎です。ありがとう。