2014-12-13 1 views
0

Атрибут авторизации на концентраторе применим к методу OnConnection()?Атрибут [Авторизовать] на концентраторе применяется к методу OnConnection()?

Я спрашиваю, потому что, если я применил атрибут [Authorize] к моему концентратору, не авторизованные пользователи все равно могут вызвать этот метод.

Должен ли я выполнять ручную авторизацию по этому методу?

ответ

0

SignalR предоставляет атрибут Authorize, чтобы указать, какие пользователи или роли имеют доступ к хабу или методу. Этот атрибут находится в пространстве имен Microsoft.AspNet.SignalR. Вы применяете атрибут Authorize для хаба или конкретных методов в концентраторе. Когда вы применяете атрибут Authorize к классу хаба, указанное требование авторизации применяется ко всем методам в концентраторе. Без атрибута Authorize подключенный клиент может получить доступ к любому общедоступному методу на концентраторе.

Если в вашем веб-приложении определена роль «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

Надеется, что это помогает.

+0

Спасибо за ваш ответ, однако с атрибутом 'Microsoft.AspNet.SignalR' [Authorize] метод OnConnected() по-прежнему вызван для неавторизованных пользователей. Спасибо – Luke

0

Я только что понял, почему метод был вызван для несанкционированных пользователей.

Это потому, что я имел следующий на моем хаб:

[Authorize(RequireOutgoing=false)] 

И не просто:

[Authorize] 

RequireOutgoing именованный параметр вызывает метод OnConnection() называться для неавторизованных пользователей ,

+0

Если вы заметили мой ответ внизу, я упомянул свойство RequieOutgoing, и вам нужно установить его на false, чтобы только авторизованные пользователи обращались к вашему концентратору. –

 Смежные вопросы

  • Нет связанных вопросов^_^