Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Пользовательский ServiceAuthenticationManager / 7 сообщений из 7, страница 1 из 1
19.10.2010, 15:38
    #36907829
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
Пытаюсь ограничить доступ к службе с привязкой NetTcpBinding(SecurityMode.Transport) и TcpClientCredentialType.Windows определенной группой пользователей Windows. В найденных примерах в интернете все почему-то пользуются переопределением ServiceAutorizationManager или развешивают атрибут PrincipalPermission. Но ведь вроде как правильно будет определять на этапе аутентификации, а не авторизации, разрешено ли пользователю подключаться к сервису? Собственно с реализацией каркаса пользовательского ServiceAuthenticationManager и его подключением проблем нет. Но вот что делать в ServiceAuthenticationManager.Authenticate() чтобы определить кто именно ломится и как узнать принадлежит ли он к нужной нам группе? Никто не пытался реализовывать свой ServiceAuthenticationManager?
...
Рейтинг: 0 / 0
20.10.2010, 11:58
    #36909133
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
Пока нашел такой выход из ситуации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
MyServiceHost.Authentication.ServiceAuthenticationManager = new MyAuthenticationManager();

class MyAuthenticationManager: ServiceAuthenticationManager
    {
        public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, ref Message message)
        {
            WindowsPrincipal winPrincipal = new WindowsPrincipal(message.Properties.Security.ServiceSecurityContext.WindowsIdentity);

            if (winPrincipal.IsInRole(WindowsBuiltInRole.Administrator))//Собственно сама проверка
            {
                return base.Authenticate(authPolicy, listenUri, ref message);
            }
            else
            {
                return null;
            }
        }
    }
...
Рейтинг: 0 / 0
20.10.2010, 14:02
    #36909528
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
Однако кривое решение. В журнале сообщений имеем:

InvalidOperationException: Метод проверки подлинности в
ServiceAuthenticationManager вернул значение NULL.
Если в коллекции не нужен возврат политик авторизации,
необходимо вернуть пустой объект ReadOnlyCollection.

А если выполнить рекомендации, то аутентификация проходит без проблем. Так как по нормальному ограничить доступ к сервису на этапе аутентификации?
...
Рейтинг: 0 / 0
20.10.2010, 14:48
    #36909651
heeepi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
LexxxxxОднако кривое решение. В журнале сообщений имеем:InvalidOperationException: Метод проверки подлинности вServiceAuthenticationManager вернул значение NULL.Если в коллекции не нужен возврат политик авторизации,необходимо вернуть пустой объект ReadOnlyCollection.А если выполнить рекомендации, то аутентификация проходит без проблем. Так как по нормальному ограничить доступ к сервису на этапе аутентификации?
ServiceAuthenticationManager необходим для аутентификации, то есть нужен только для того, чтобы сказать что пользователь действительно тот, за кого себя выдает. Вам же необходимо выполнять проверку прав доступа к сервису, а это задача уже не аутентификации, а авторизации.
Для разграничения прав доступа к сервису используется ServiceAuthorizationManager . Попробуйте использовать его, только не на уровне Claimns, а на уровне разграничения по ролям. В этом случае у вас будут возвращаться на клиент нормальная ошибка AccessDeny.
Если нужна какая то более гибкая настройка, то ройте в сторону разграничения прав на основе заявок (Claimns).
...
Рейтинг: 0 / 0
20.10.2010, 15:42
    #36909818
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
heeepiServiceAuthenticationManager необходим для аутентификации, то есть нужен только для того, чтобы сказать что пользователь действительно тот, за кого себя выдает. Вам же необходимо выполнять проверку прав доступа к сервису, а это задача уже не аутентификации, а авторизации.
А я подумал что уже здесь можно отбить пользователя, так как известно уже кто ломится к сервису. Просто не совсем (а скорее совсем не) понимаю что и как работает в WCF.
...
Рейтинг: 0 / 0
21.12.2010, 11:36
    #37026449
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
Никто не подскажет, как в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class AuthorizationManager : ServiceAuthorizationManager
    {
        public override bool CheckAccess(OperationContext operationContext, ref Message message)
            {
                //....
            }
    }
...
Рейтинг: 0 / 0
21.12.2010, 11:40
    #37026470
Lexxxxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользовательский ServiceAuthenticationManager
Никто не подскажет, как в
Код: plaintext
1.
2.
3.
4.
5.
6.
class MyAuthorizationManager : ServiceAuthorizationManager
    {
        public override bool CheckAccess(OperationContext operationContext, ref Message message)
            {
                //....
            }
    }
в параметре message или operationContext добраться до параметров вызываемого метода, определить их число и значения. Само наименование метода как я понял можно получить используя например message.Headers.Action.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Пользовательский ServiceAuthenticationManager / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]