diff --git a/websocket-sharp/Net/HttpListenerContext.cs b/websocket-sharp/Net/HttpListenerContext.cs index 4c1cc906..390ca563 100644 --- a/websocket-sharp/Net/HttpListenerContext.cs +++ b/websocket-sharp/Net/HttpListenerContext.cs @@ -191,30 +191,34 @@ namespace WebSocketSharp.Net internal bool Authenticate () { var schm = _listener.SelectAuthenticationScheme (_request); + if (schm == AuthenticationSchemes.Anonymous) return true; if (schm == AuthenticationSchemes.None) { _response.Close (HttpStatusCode.Forbidden); + return false; } var realm = _listener.GetRealm (); - var user = - HttpUtility.CreateUser ( - _request.Headers["Authorization"], - schm, - realm, - _request.HttpMethod, - _listener.GetUserCredentialsFinder () - ); + var user = HttpUtility.CreateUser ( + _request.Headers["Authorization"], + schm, + realm, + _request.HttpMethod, + _listener.GetUserCredentialsFinder () + ); if (user == null || !user.Identity.IsAuthenticated) { - _response.CloseWithAuthChallenge (new AuthenticationChallenge (schm, realm).ToString ()); + var chal = new AuthenticationChallenge (schm, realm).ToString (); + _response.CloseWithAuthChallenge (chal); + return false; } _user = user; + return true; }