Laden...

Wie kann ich den Basic-Http-Auth-Header bei WebSockets und ASP.NET WebAPI mitsenden?

Erstellt von Wax vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.136 Views
Wax Themenstarter:in
731 Beiträge seit 2006
vor 7 Jahren
Wie kann ich den Basic-Http-Auth-Header bei WebSockets und ASP.NET WebAPI mitsenden?

Guten Tag,

ich schreibe zur Zeit an einem WebSocket und würde diesen aus Gründen der Einfachheit gerne durch meinen bereits existierenden WebApi Service hosten lassen.

Webserver ist der IIS ab Version 8.
Der "Handshake" funktioniert soweit auch gut mittels:


[HttpGet]
public HttpResponseMessage Connect()
{
   if (HttpContext.Current.IsWebSocketRequest)
   {
       HttpContext.Current.AcceptWebSocketRequest(ProcessRequestInternal);
   }

   return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
}

Ich bin diesen Weg gegangen, da mein Service sich bereits um die Authentifizierung meiner User kümmert. Dies wurde bisher per Basic-Http Authentication gemacht. Nun habe ich das Problem, dass ich den "Authorization: Basic blabla" Header nicht mehr mitsenden kann und somit sich der WebSocketController nicht mehr in meine Umgebung "passt".

Weiß jemand wie man das normalerweise macht? Per JavaScript WebSocket Objekt kann man z.B. keine Http-Header setzen. 😭

MfG
wax

16.807 Beiträge seit 2008
vor 7 Jahren

Schau Dir mal die Dokumentation der WebSocket-Klasse in JavaScript an

Der Aufruf

var ws = new WebSocket("ws://username:password@example.com")

macht automatisch ein Basic Auth Header.

Ebenso funktioniert

ws = new WebSocket 'ws://localhost:8000',{
        headers : {
          Basic: <token hier>
        }
      }
Wax Themenstarter:in
731 Beiträge seit 2006
vor 7 Jahren

Moin,

das klappt anscheinend nur unter Node.js. Im Browser sieht die WebSocket Klasse leider anders aus und nimmt dieses Options Objekt nicht entgegen.

MfG
wax