web-dev-qa-db-ja.com

SignalR MVC 5 Websocketに有効な資格情報がありません

mVCアプリケーションでSignalRを使用しようとしました。それはうまく機能しますが、Chromeコンソールで次のエラーが表示されます

 WebSocket connection to 'ws://localhost:18245/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bNDGLnbSQThqY%2FSjo1bt
8%2FL45Xs22BDs2VcY8O7HIkJdDaUJ4ftIc54av%2BELjr27ekHUiTYWgFMfG6o7RaZwhf
fpXavzWQ1jvkaxGm5rI%2BWtK7j0g1eQC2aOYP366WmRQLXCiYJfsm4EbwX6T8n2Aw
%3D%3D&connectionData=%5B%7B%22name%22%3A%22importerhub%
22%7D%5D&tid=9' failed: HTTP Authentication failed; no valid credentials available 

面白いことは、ハブを介してコントローラーから呼び出すjqueryメソッドが正常に機能することです。

jQuery:

 $(function () {
            // Initialize the connection to the server
            var importerHub = $.connection.importerHub;

            // Preparing a client side function
            // called sendMessage that will be called from the server side
            importerHub.client.sendMessage = function (message) {
                showOrUpdateSuccessMessage(message);
            };
            $.connection.hub.start();
        });

コントローラ:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
            hubContext.Clients.All.sendMessage("All operations complete");

.Net v4.5.1、SignalR v2.1.2.0およびIIS 8.5 with Windows Authenticationを使用しています。

このエラーを修正するにはどうすればよいですか?

30
Konobi

Chromeの問題に直面しているようです。問題は、ChromeがWebSocketのWindows認証を適切に処理しないことです。

以下は、数年前に提出されたChromeはHTTP認証の形式をサポートしていませんでした。

https://code.google.com/p/chromium/issues/detail?id=123862

この問題は、基本認証およびダイジェスト認証では解決されていますが、Windows(NTLM/Negotiate)認証では解決されていません。 Chrome WebSocketsによるWindows認証のサポートの進捗状況を追跡するために1か月前に作成された問題がありました。

https://code.google.com/p/chromium/issues/detail?id=423609

どうやら、Windows認証の問題はChrome devチャネルで部分的に修正されますが、WebSocketを確立する前にクライアントがサーバーで既に認証されている場合のみです。

コントローラーからsendMessageを呼び出すことができる理由は、WebSocket接続が失敗したときにSignalRが自動的にWebSocket以外のトランスポート(サーバー送信イベントまたはロングポーリング)の使用にフォールバックするためです。 ChromeはSignalRの他のトランスポートでWindows認証を適切に処理します。

何も変更しないことをお勧めします。 Chromeは最終的にWebSocketのWindows認証をサポートします。

chromeコンソールのエラー以外の唯一の本当の問題は、ChromeでSignalR接続を確立するのに少し時間がかかる可能性があることです。それが大きな問題である場合、いつでもできます クライアントが使用するトランスポートを指定してください 。したがって、Chromeでは、serverSentEventslongPollingしか試すことができませんでしたが、その後Chromedoesは問題を修正します。コードを変更するまで、可能な限り最適なトランスポートを使用しません。

43
halter73

バグは生きているようですが、彼らはそれに取り組んでいるようです。 https/wssを使用して問題を解決できます。

読み取り codeMonkey s answer at SignalRはWindows統合認証で動作しない

0
Flo

ここに私がそれを解決した方法があり、私にとってこれはChromeとは何の関係もありませんでした。 chromeを使用しており、リアルタイムデータを処理しています。私のエラーは春のセキュリティでした

.antMatchers("/ws/myapp", "/http/myaap", "/topic/**", "/app/**" ).permitAll()

WebSocket Handshake-予期しない応答コード200-AngularJsとSpring Boot

0
DiaMaBo

Chrome: here からダウンロードする)のDevチャンネルに切り替えることで、この問題を解決できました。インストールしたら、chrome:// flagsでdevフラグを有効にする必要がありました。 /。「認証のためのWebSocket接続の再利用を有効にする」を検索し、機能を有効にします。バージョン69以上である必要があります

0
R2D2