2017-01-31 2 views
0

Я только начал изучать WCF, и мне нужно написать чат-программу с Winforms.Как использовать механизм разрешений Windows?

Мне нужно создать локальную группу пользователей (с Windows), которая будет иметь разрешения на использование этой программы чата. Пользователи, не входящие в группу, не могут его использовать. Я читал об этом, но я до сих пор не понимаю, что мне нужно делать на стороне сервера для этой авторизации, и как я убеждаюсь, что только пользователи из этой конкретной группы имеют разрешения.

+1

Вы собираетесь развернуть это или использовать его в одной организации? В любом случае, подход, который вы принимаете, звучит сложно, чтобы поддержать ... Если он находится в одной организации, я бы позволил sysadmin обрабатывать его вручную, а не пытаться установить это из кода. Если это для развертывания, вам, скорее всего, повезет больше, используя традиционный вход пользователя или привязав к чему-то вроде Azure AD для аутентификации. –

+0

Я знаю, что это что-то с услугой Авторизация и поведение на web.config и, возможно, сеансах. –

+0

Я уверен, что WCF включает эту функцию, но имейте в виду, что использование таких групп применимо только к одному домену (т. Е. К сети рабочего места). Люди обычно имеют права администратора на своих персональных компьютерах, поэтому они могут добавлять себя в любую группу, которую они хотят, и если компьютеры не находятся в том же домене, что и сервер, то я думаю, что они разные «группы», даже если локальные группы имеют одно и то же имя. На стороне клиента все это будет в пространстве имен System.Security.Principal, если это поможет любому. Вы можете проверить группы безопасности пользователя с этими классами. –

ответ

0

Это, кажется, что вы ищете, хотя я повторяю предупреждение, что этот подход будет работать только в пределах одного домена (что обычно означает, что это хорошо для интрасети только):

WCF Web Service Authentication based on AD groups

общепринятый ответ показывает, как захватить контекст безопасности пользователя, делающего запрос на обслуживание, путем бурения в этот объект, чтобы определить принадлежность к группе:

WindowsIdentity caller = ServiceSecurityContext.Current.WindowsIdentity; 

Вы должны были бы использовать wsHttp или сеть Tcp (в отличие от основного HTTP-привязки), чтобы заставить это работать - эти механизмы привязки предлагают больше возможностей в обмен на меньшую функциональную совместимость с другими платформами. Если вы строго «внутри брандмауэра», привязка netTcp обычно имеет больше смысла, хотя она может использовать порты, которые брандмауэр блокирует по умолчанию. wsHTTP использует стандартные HTTP-порты, которые обычно открыты.

На стороне клиента есть эквивалентные объекты в пространстве имен System.Security.Principal, которые позволят вам также применять политики безопасности.

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