如何从[授权()]访问SignalR Hub参数



我正在为聊天应用程序制作一个Signalr Hub(不是真的,但假装是)。我已经设置了授权,以便房间的创建者可以邀请用户到房间。因此,有一张桌子存储拥有什么,并获得了访问权限。

这很好。下一步是添加索赔,这样我就不必检查谁可以访问每个请求。我检查一次用户试图加入聊天室,添加他们的索赔,然后将其发送到启动Signalr连接的页面。

现在我想在轮毂上使用[授权]装饰器,而不是扔样式板

user.Claims.Any(x=> x.ClaimType == $"CanJoinRoom_{RoomId}");

到处都是。

我已经阅读了如何在此处进行基于自定义策略的授权:https://learn.microsoft.com/en-us/aspnet/core/security/authorization/policies#security-authorization-policies-policies-policies

我有我需要的每一部分,除了一个:指定房间ID的实际论点。我已经能够从

中破解一些东西
[MyCustomAuthorizeMethod(this.Context.Request.Form["data"])]

,但这似乎有些丑陋,要使它起作用,我必须序列化此JSON

{"H":"myhubname","M":"Initialize","A":[39],"I":0}

这似乎真的很骇人听闻。我更喜欢将室友作为参数传递。这只是一行,但似乎遥不可及。有一种优雅的方法吗?

如果要授权调用给定方法,则可以将AuthorizeAttribute放在集线器方法上。您可能还会在HUB授权和身份验证方面找到此帖子。

这是不可能的,因为属性是在编译时计算的,因此不能具有变量。感谢Pawel指出了这一点。https://stackoverflow.com/users/1168070/pawel

最新更新