如何从 [Authorize()] 访问 SignalR Hub 参数?
How to access the SignalR Hub arguments from [Authorize()]?
我正在为聊天应用程序制作一个信号器中心(这不是真的,但让我们假装它是)。
我设置了我的授权,以便用户可以被房间的创建者邀请到房间。所以有一个 table 存储谁拥有什么,以及谁被授予访问权限。
这很好。接下来的步骤是添加声明,这样我就不必检查每个请求的访问权限。当用户尝试加入聊天室、添加他们的声明并将他们发送到启动信号器连接的页面时,我会检查一次。
现在我想在我的集线器上使用 [authorize] 装饰器,而不是扔样板
user.Claims.Any(x=> x.ClaimType == $"CanJoinRoom_{RoomId}");
无处不在。
我已经阅读了如何在此处进行基于自定义策略的授权:
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies#security-authorization-policies-based
除了一个:指定房间 ID 的实际参数外,我拥有所有需要的部分。我已经能够从
破解一些东西
[MyCustomAuthorizeMethod(this.Context.Request.Form["data"])]
但这看起来有点难看,为了让它工作我必须序列化这个 json
{"H":"myhubname","M":"Initialize","A":[39],"I":0}
这看起来真的很老套。我更愿意将 RoomId 作为参数传递。
它只是一行,但似乎是一个世界。有没有一种优雅的方法可以做到这一点?
如果您想授权调用给定的方法,您可以将 AuthorizeAttribute
on the hub method. You may also find this post 放在 hub 授权和身份验证上很有帮助。
这是不可能的,因为属性是在编译时计算的,因此不能有变量。感谢 Pawel 指出这一点。
https://whosebug.com/users/1168070/pawel
我正在为聊天应用程序制作一个信号器中心(这不是真的,但让我们假装它是)。 我设置了我的授权,以便用户可以被房间的创建者邀请到房间。所以有一个 table 存储谁拥有什么,以及谁被授予访问权限。
这很好。接下来的步骤是添加声明,这样我就不必检查每个请求的访问权限。当用户尝试加入聊天室、添加他们的声明并将他们发送到启动信号器连接的页面时,我会检查一次。
现在我想在我的集线器上使用 [authorize] 装饰器,而不是扔样板
user.Claims.Any(x=> x.ClaimType == $"CanJoinRoom_{RoomId}");
无处不在。
我已经阅读了如何在此处进行基于自定义策略的授权: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies#security-authorization-policies-based
除了一个:指定房间 ID 的实际参数外,我拥有所有需要的部分。我已经能够从
破解一些东西[MyCustomAuthorizeMethod(this.Context.Request.Form["data"])]
但这看起来有点难看,为了让它工作我必须序列化这个 json
{"H":"myhubname","M":"Initialize","A":[39],"I":0}
这看起来真的很老套。我更愿意将 RoomId 作为参数传递。 它只是一行,但似乎是一个世界。有没有一种优雅的方法可以做到这一点?
如果您想授权调用给定的方法,您可以将 AuthorizeAttribute
on the hub method. You may also find this post 放在 hub 授权和身份验证上很有帮助。
这是不可能的,因为属性是在编译时计算的,因此不能有变量。感谢 Pawel 指出这一点。 https://whosebug.com/users/1168070/pawel