我有.net core 2.1后端和angular 5前端应用程序。我为应用程序实现了网络套接字,并且在本地它可以正常工作,但是在服务器上,我遇到了下一个错误:
与'wss://back-end-server.com/ws'的WebSocket连接失败:HTTP身份验证失败;没有有效的凭据
当客户端尝试重新连接时,我会得到:
与'wss://back-end-server.com/ws'的WebSocket连接失败:WebSocket握手期间出错:'Sec-WebSocket-Accept'标头值不正确
客户端使用rxjs websockets连接到服务器:
#standardSQL
select
regexp_extract(line, r'"startstr' || pattern) start,
regexp_extract(line, r'"endstr' || pattern) `end`,
from `project.dataset.table` t,
unnest([to_json_string(t)]) line,
unnest(generate_array(0, array_length(split(line))/3 - 1)) index,
unnest([if(index > 0, cast(index as string), '') || '":"?([^,"]+)"?']) pattern
where regexp_extract(line, r'"strcol' || pattern) = cast(1012 as string)
所有请求都使用Windows凭据拦截器包装:
private connect(): void {
this.websocket$ = new WebSocketSubject(this.config);
this.websocket$.subscribe(
(message: any) => {
this.wsMessages$.next(message);
},
(error: Event) => {
console.log(`Websocket connection error: ${error.target}`);
if (!this.websocket$) {
// run reconnect if errors
this.reconnect();
}
});
}
这是我的后端Startup.cs的摘录
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
return next.handle(request);
}
NotificationsMessageHandler:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseWebSockets();
var serviceScopeFactory = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>();
var serviceProvider = serviceScopeFactory.CreateScope().ServiceProvider;
app.MapWebSocketManager("/ws", serviceProvider.GetService<NotificationsMessageHandler>());
...
我的客户端和服务器位于具有Windows身份验证并启用了CORS的不同服务器上:
public override async Task OnConnected(WebSocket socket)
{
await base.OnConnected(socket);
var socketId = WebSocketConnectionManager.GetId(socket);
await SendMessageToAllAsync(JsonConvert.SerializeObject($"{socketId} is now connected"));
}
对于预检请求,anonymousAuthentication已打开。
我已经检查了IIS是否已安装WebSockets。我还能尝试什么? 预先谢谢你。