英文:
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 的方式:
using Duende.IdentityServer.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using System.Security.Claims;
namespace BagiBagiDev.Server.Hubs
{
[Authorize]
public class PaymentHub : Hub
{
public async Task TestMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override async Task OnConnectedAsync()
{
var username = Context.User.FindFirst(c => c.Type == ClaimTypes.Name).Value;
if (!string.IsNullOrEmpty(username))
{
await Groups.AddToGroupAsync(Context.ConnectionId, username);
}
await base.OnConnectedAsync();
}
}
}
我尝试在互联网上搜索,很多人都指向了一个 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
using Duende.IdentityServer.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using System.Security.Claims;
namespace BagiBagiDev.Server.Hubs
{
[Authorize]
public class PaymentHub : Hub
{
public async Task TestMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override async Task OnConnectedAsync()
{
var username = Context.User.FindFirst(c => c.Type == ClaimTypes.Name).Value;
if (!string.IsNullOrEmpty(username))
{
await Groups.AddToGroupAsync(Context.ConnectionId, username);
}
await base.OnConnectedAsync();
}
}
}
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.
builder.Services.TryAddEnumerable(
descriptor: ServiceDescriptor.Singleton<
IPostConfigureOptions<JwtBearerOptions>,
ConfigureJwtBearerOptions>());
Now it works like a charm. Thanks again for all your help Brian!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论