powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Пользовательский ServiceAuthenticationManager
7 сообщений из 7, страница 1 из 1
Пользовательский ServiceAuthenticationManager
    #36907829
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь ограничить доступ к службе с привязкой NetTcpBinding(SecurityMode.Transport) и TcpClientCredentialType.Windows определенной группой пользователей Windows. В найденных примерах в интернете все почему-то пользуются переопределением ServiceAutorizationManager или развешивают атрибут PrincipalPermission. Но ведь вроде как правильно будет определять на этапе аутентификации, а не авторизации, разрешено ли пользователю подключаться к сервису? Собственно с реализацией каркаса пользовательского ServiceAuthenticationManager и его подключением проблем нет. Но вот что делать в ServiceAuthenticationManager.Authenticate() чтобы определить кто именно ломится и как узнать принадлежит ли он к нужной нам группе? Никто не пытался реализовывать свой ServiceAuthenticationManager?
...
Рейтинг: 0 / 0
Пользовательский ServiceAuthenticationManager
    #36909133
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока нашел такой выход из ситуации:
Код: 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
Пользовательский ServiceAuthenticationManager
    #36909528
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако кривое решение. В журнале сообщений имеем:

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

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


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