問題タブ [nsurlcredentialstorage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
688 参照

ios - NSURLCredentialStorage setDefaultCredential: [NSURLSession sharedSession] では機能しません

私は困惑しています: 私のアプリは、HTTPS に自己署名証明書を使用し、クライアント側の認証を必要とするサーバーに接続する必要があります。さらに悪いことに、実際にはそのサーバーに接続するには iOS メディア プレーヤーが必要なので、Apple の指示に厳密に従いました。

しかし、それはうまくいきません。そこで、サーバーに手動でリクエストを送信しようとしました:

私が得るのはこのエラーだけです:

ここで、独自の NSURLSession を設定し、URLSession:didReceiveChallenge:completionHandler: コールバックを使用すると:

その後:

[session.configuration.URLCredentialStorage defaultCredentialForProtectionSpace:challenge.protectionSpace] をどのように使用しているかに注意してください。これは、NSURLSession のデフォルトの実装が認証チャレンジを取得したときに行うと思われるものです。

この特定の接続では、うまくいきます!これは、資格情報が問題なく、デフォルトの NSURLCredentialStorage にデフォルトの資格情報として適切に登録されていることを証明します。

しかし、didReceiveChallenge: コールバックを回避するソリューションは、メディア プレーヤーが使用している NSURLSession を制御できないため、役に立ちません。

CustomHTTPProtocolハックを試しましたが、うまくいきません。

なにか提案を?SOに関する同様の投稿をすべて調べましたが、これに対する解決策が見つかりません。この投稿は非常に近いですが、受け入れられた回答は私には意味がなく、明らかに Apple のドキュメントと矛盾しています。

0 投票する
1 に答える
850 参照

ios - NSURLSession の資格情報を変更する方法

次の問題があります: サーバーにリクエストを送信しています。サーバーは HTTP 基本認証を使用し、

  • 認証を送信しない場合は 401
  • 無効な認証を送信すると 401
  • 有効な認証を送信したが、そのユーザーに対してリソースが禁止されている場合は 403 。

401 を受信すると、私の NSURLSession はフレンドリーで、次の方法でデリゲートを呼び出します。

ここで、サーバーに送信される資格情報を変更できます。

ただし、403 を受信すると、問題が発生します。そこから、セッションで 403 を取得するために使用したもの以外の資格情報を使用することはできません。その保護スペースのために将来送信されますか?共有された NSURLCredentialStorage を手動で空にしたり、そこに正しい認証情報を直接設定したりしても、役に立ちません。

この呼び出しの後、正しい資格情報だけが NSURLCredentialStorage にリストされますが、サーバーへの次の呼び出しにはまだ古い資格情報が含まれているため、必然的に別の 403 につながります。

そのメソッドを使用してセッションをリセットしてreset(completionHandler: @escaping () -> Void)も役に立ちません。

TLDR ; NSURLSession が特定の保護ドメインで成功した後も引き続き使用する資格情報を変更するにはどうすればよいですか?