“Websocket连接失败,当我向hub添加了Authorize属性时”

huangapple go评论100阅读模式
英文:

Websocket connection failed when I added Authorize attribute to the hub

问题

我在连接到 WebSocket 时遇到了一个奇怪的问题。当我在 hub 的顶部添加了 Authorize 属性时,我的应用程序不想连接到 wss。然而,当我尝试发送请求时,它仍然按预期工作(我猜它是通过 http 完成的?)。此外,当我检查我的网络标签时,它并没有显示 401 错误或任何内容,状态只是显示为已完成。我在这里做错了什么?

这是我收到的错误消息:
https://i.stack.imgur.com/BLyZM.png

这是我的网络标签的截图:
https://i.stack.imgur.com/b5c3v.png

这是我当前实现 hub 的方式:

  1. using Duende.IdentityServer.Extensions;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.SignalR;
  4. using System.Security.Claims;
  5. namespace BagiBagiDev.Server.Hubs
  6. {
  7. [Authorize]
  8. public class PaymentHub : Hub
  9. {
  10. public async Task TestMessage(string user, string message)
  11. {
  12. await Clients.All.SendAsync("ReceiveMessage", user, message);
  13. }
  14. public override async Task OnConnectedAsync()
  15. {
  16. var username = Context.User.FindFirst(c => c.Type == ClaimTypes.Name).Value;
  17. if (!string.IsNullOrEmpty(username))
  18. {
  19. await Groups.AddToGroupAsync(Context.ConnectionId, username);
  20. }
  21. await base.OnConnectedAsync();
  22. }
  23. }
  24. }

我尝试在互联网上搜索,很多人都指向了一个 vscode 的 bug,但我认为这应该已经在我当前的版本(v 17.6)中修复了,所以我不确定发生了什么事情。

英文:

So I am encountering this weird behavior with my blazor app when connecting to websocket. When I added Authorize attribute at the top of the hub, my application doesn't want to connect to the wss. However, when I tried sending a request, it still works as expected (I am guessing its doing it over http?). Also, when I checked my network tab, it doesn't say 401 error or anything, the status of it just says finished. What did I do wrong here?

This is the error message I got
https://i.stack.imgur.com/BLyZM.png

And this is the screenshot of my network tab
https://i.stack.imgur.com/b5c3v.png

And this is how I currently implement my hub

  1. using Duende.IdentityServer.Extensions;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.SignalR;
  4. using System.Security.Claims;
  5. namespace BagiBagiDev.Server.Hubs
  6. {
  7. [Authorize]
  8. public class PaymentHub : Hub
  9. {
  10. public async Task TestMessage(string user, string message)
  11. {
  12. await Clients.All.SendAsync("ReceiveMessage", user, message);
  13. }
  14. public override async Task OnConnectedAsync()
  15. {
  16. var username = Context.User.FindFirst(c => c.Type == ClaimTypes.Name).Value;
  17. if (!string.IsNullOrEmpty(username))
  18. {
  19. await Groups.AddToGroupAsync(Context.ConnectionId, username);
  20. }
  21. await base.OnConnectedAsync();
  22. }
  23. }
  24. }

I tried searching on the internet and a lot of people were pointing to a vscode bug, but I think that should've been fixed with the current version that I have (v 17.6) so I am not sure what's going on.

答案1

得分: 1

以下是翻译好的部分:

"All credits goes to this guy right here!"

"Turns out I miss a middleware to check for when the accessToken was received in the middleware."

"Now it works like a charm. Thanks again for all your help Brian!"

英文:

All credits goes to this guy right here!

Turns out I miss a middleware to check for when the accessToken was received in the middleware.

  1. builder.Services.TryAddEnumerable(
  2. descriptor: ServiceDescriptor.Singleton<
  3. IPostConfigureOptions<JwtBearerOptions>,
  4. ConfigureJwtBearerOptions>());

Now it works like a charm. Thanks again for all your help Brian!

huangapple
  • 本文由 发表于 2023年6月13日 05:40:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76460492.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定