首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当access_token长度超过大约2000个字符时,SignalR在connect时返回404 -

当access_token长度超过大约2000个字符时,SignalR在connect时返回404 -
EN

Stack Overflow用户
提问于 2021-02-22 05:30:42
回答 1查看 134关注 0票数 0

我正在做一个实现SignalR的.NET 5项目,用于Angular 11前端,具有OAuth2身份验证。该应用程序托管在Kubernetes上,因此我需要使用skipNegotiation: truetransport: HttpTransportType.WebSockets来强制在负载均衡器后面的单个服务器上建立连接。这将强制SignalR库将我的访问令牌作为查询字符串参数发送。在实现后,我得到了一个404响应,我花了很长时间才弄清楚原因:我的访问令牌太长了。如果我发送随机字符作为访问令牌,长度不超过2035个字符,它就可以工作(当然,它显然无法通过身份验证,但这是意料之中的)。如果我发送长度约为2500个字符的完整访问令牌,它将返回404响应。

我相信我的实现是相当典型的,因为到目前为止它只是遵循示例代码:

Startup.cs:

代码语言:javascript
复制
// In ConfigureServices()
services.AddSignalR();

//In Configure()
app.UseEndpoints(endpoints => {
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapHub<MessageHub>("/message-hub");
});

MessageHub.cs:

代码语言:javascript
复制
public class MessageHub : Hub {
    public async Task EchoTest(string message) => await Clients.All.SendAsync("echo", message);

    public override Task OnConnectedAsync() {
        Debug.WriteLine("connected");
        return base.OnConnectedAsync();
    }
}

客户端:

代码语言:javascript
复制
const connection = new HubConnectionBuilder()
  .withUrl('http://localhost:5001/message-hub', {
    skipNegotiation: true,
    transport: HttpTransportType.WebSockets,
    accessTokenFactory: () => {
      return 'MY_ACCESS_TOKEN'; // If 2036 characters or greater, 404 responses ensue
    }
  })
  .build()
  .start()
  .then(() => console.log('Connection started'))
  .catch(err => console.log('Error while starting connection: ' + err))

对我来说,通过对声明标识符等进行大量重构来减少访问令牌的长度是可行的,但这是最后的手段。理想情况下,我想要的是一种将我当前的大型访问令牌按原样提供给SignalR而又不破坏它的方法。如有任何建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-11-04 23:55:22

抛出404的东西是IIS请求过滤。下面的web.config为我们解决了这个问题

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxQueryString="5000"></requestLimits>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66307330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档