集线器上的authorize属性是否适用于OnConnection()方法?
我问,因为如果我将[Authorize]
属性应用到我的集线器,非授权用户仍然可以调用此方法。
我是否应该对此方法进行手动授权?
答案 0 :(得分:0)
SignalR提供Authorize属性以指定哪些用户或角色可以访问集线器或方法。此属性位于“Microsoft.AspNet.SignalR”命名空间中。您将“授权”属性应用于集线器或集线器中的特定方法。将Authorize属性应用于集线器类时,指定的授权要求将应用于集线器中的所有方法。如果没有Authorize属性,连接的客户端可以访问集线器上的任何公共方法。
如果您在Web应用程序中定义了名为“Admin”的角色,则可以指定只有该角色的用户才能使用以下代码访问集线器。
[Authorize(Roles = "Admin")]
public class AdminAuthHub : Hub
{
}
或者,您可以指定集线器包含一个可供所有用户使用的方法,另一个方法仅供经过身份验证的用户使用,如下所示。
public class SampleHub : Hub
{
public void UnrestrictedSend(string message){ . . . }
[Authorize]
public void AuthenticatedSend(string message){ . . . }
}
以下示例说明了不同的授权方案:
[Authorize] – only authenticated users
[Authorize(Roles = "Admin,Manager")] – only authenticated users in the specified roles
[Authorize(Users = "user1,user2")] – only authenticated users with the specified user names
[Authorize(RequireOutgoing=false)] – only authenticated users can invoke the hub,
but calls from the server back to clients are not limited by authorization, such as, when only
certain users can send a message but all others can receive the message.
The RequireOutgoing property can only be applied to the entire hub, not on individuals methods within the hub. When RequireOutgoing is not set to false, only users that meet the authorization requirement are called from the server.
您可以在此article
中获取更多详细信息希望这有帮助。
答案 1 :(得分:0)
我刚刚意识到为什么要为非授权用户调用该方法。
因为我的中心有以下内容:
[Authorize(RequireOutgoing=false)]
而不仅仅是:
[Authorize]
RequireOutgoing命名参数会导致为非授权用户调用OnConnection()
方法。