我在ASP.NET Core Web API应用程序中使用JWT身份验证令牌.令牌由API本身生成,而不是由第三方生成.
我将SignalR成功添加到堆栈中,但现在我需要验证正在尝试执行服务器(Hub)方法的用户.
有人建议在 JavaScript中的“qs”属性中传递令牌.这对我来说不行,因为我们的令牌真的很大(它们包含很多索赔).
我尝试编写一个自定义中间件,从有效载荷读取令牌并自动验证用户.问题在于,当使用WebSockets时,中间件不被执行.
任何想法都会有所帮助.
我将SignalR成功添加到堆栈中,但现在我需要验证正在尝试执行服务器(Hub)方法的用户.
有人建议在 JavaScript中的“qs”属性中传递令牌.这对我来说不行,因为我们的令牌真的很大(它们包含很多索赔).
我尝试编写一个自定义中间件,从有效载荷读取令牌并自动验证用户.问题在于,当使用WebSockets时,中间件不被执行.
任何想法都会有所帮助.
解决方法
看看建议使用查询字符串
Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWT的文章.我知道你的令牌太长,但作者解释了如何使用中间件来验证请求.
以下是文章的总结:
- SignalR does not have any special authentication mechanism built in,it is using the standard ASP.NET authentication.
- JWT is typically sent in the Authorization header of a request
- The SignalR JavaScript client library does not include the means to send headers in the requests,it does however allow you to pass a query string
- If we pass the token in the query string we can write a middleware that adds a authorization header with the token as its value. This must be done before the Jwt middleware in the pipeline
- Be aware of the “Bearer ” format