gpt4 book ai didi

authentication - SignalR (.NET Core) 中的 JWT 身份验证,无需在查询字符串中传递 token

转载 作者:行者123 更新时间:2023-12-03 14:19:38 25 4
gpt4 key购买 nike

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

最佳答案

查看建议使用查询字符串 Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWT 的文章.我知道您的 token 太长,但作者解释了如何使用中间件来验证请求。

以下是文章的摘要:

  • 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


我已经强调了您的自定义中间件应该在 Jwt 中间件之前注册的关键点。

从此 answer您可以创建一个 WebSocket 连接并将您的 token 作为基本身份验证参数传递:
var ws = new WebSocket($"ws://{token}@example.com/service");

关于authentication - SignalR (.NET Core) 中的 JWT 身份验证,无需在查询字符串中传递 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com