Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 信号器(.NET Core)中的JWT身份验证,而不在查询字符串中传递令牌_Authentication_Asp.net Core_Authorization_Signalr_Jwt - Fatal编程技术网

Authentication 信号器(.NET Core)中的JWT身份验证,而不在查询字符串中传递令牌

Authentication 信号器(.NET Core)中的JWT身份验证,而不在查询字符串中传递令牌,authentication,asp.net-core,authorization,signalr,jwt,Authentication,Asp.net Core,Authorization,Signalr,Jwt,我正在ASP.NET核心Web API应用程序中使用JWT身份验证令牌。令牌由API本身生成,而不是由第三方生成。 我成功地将signar添加到堆栈中,但现在我需要对尝试执行服务器(Hub)方法的用户进行身份验证。 有人建议在JavaScript的“qs”属性中传递令牌。这将不适用于我,因为我们的代币非常大(它们包含大量索赔)。 我尝试编写一个自定义中间件,用于从负载读取令牌并自动验证用户。问题是,当使用WebSocket时,中间件没有被执行。 任何想法都会有帮助。看看建议使用查询字符串的文章。

我正在ASP.NET核心Web API应用程序中使用JWT身份验证令牌。令牌由API本身生成,而不是由第三方生成。 我成功地将signar添加到堆栈中,但现在我需要对尝试执行服务器(Hub)方法的用户进行身份验证。 有人建议在JavaScript的“qs”属性中传递令牌。这将不适用于我,因为我们的代币非常大(它们包含大量索赔)。 我尝试编写一个自定义中间件,用于从负载读取令牌并自动验证用户。问题是,当使用WebSocket时,中间件没有被执行。
任何想法都会有帮助。

看看建议使用查询字符串的文章。我知道您的令牌太长,但作者解释了如何使用中间件对请求进行身份验证

以下是文章的总结:

  • SignalR没有内置任何特殊的身份验证机制,它使用的是标准的ASP.NET身份验证
  • JWT通常在请求的授权头中发送
  • signarjavascript客户端库不包括在请求中发送头的方法,但是它允许您传递查询字符串
  • 如果我们在查询字符串中传递令牌,我们可以编写一个中间件,添加一个授权头,并将令牌作为其值这必须在管道中的Jwt中间件之前完成
  • 请注意“承载”格式
我强调了一个关键点,您的定制中间件应该在Jwt中间件之前注册

由此,您可以创建WebSocket连接并将令牌作为基本身份验证参数传递:

var ws = new WebSocket($"ws://{token}@example.com/service");

可能的重复不是重复,因为我根本不能使用查询字符串,我的令牌太长,我得到了414错误。我想构建一个类似于自定义中间件的东西,从信号器消息中提取令牌,然后让用户登录。不幸的是,传递令牌的方法只有两种——查询字符串或作为参数。希望在下一版本的SignalR中解决这个问题。可能是头值?MS提供的SignalR JS库不支持设置头中间件在那里,只是qs太长了,我知道您的qs太长了。您能否将令牌嵌入到有效负载中,并使用中间件对其进行解码,或者更早地注册它?好的,我认为您可能在Signal之前无法访问中间件中的有效负载。在这种情况下,您可以在读取有效负载时为应用程序代码中的令牌实现自定义解析器。您将无法使用Authorize属性,但您将能够检查用户的声明和所有这些。现在使用丑陋的黑客修复了它,gzip压缩了令牌并缩短了声明名称。还可以查看此答案,了解基本auth的黑客攻击。您仍然需要实现自定义中间件,但令牌可以通过头传递。哪个查询字符串更安全。