Я пытаюсь реализовать авторизацию для службы WCF, но у меня возникли некоторые существенные трудности. Я думаю, мне нужно использовать гибридное решение, сочетающее пользовательскую аутентификацию и претензии, но я не уверен, что это правильно.Разрешение WCF - доступ к операциям по претензиям
Мое приложение использует проверку подлинности Windows для подключения к приложению. После авторизации пользователя доступ к функциям должен предоставляться на основе информации о разрешении, хранящейся в базе данных.
Пользователям могут быть назначены разрешения через интерфейс приложения. Один уровня разрешения иерархии соответствует доступу к отдельным функциям WCF:
- Доступа к модулю (чисто организационному)
- Доступа к функции (доступ к функции WCF, проверяется автоматически)
- Функции -специфические разрешения (проверяются динамически в коде)
- Доступа к функции (доступ к функции WCF, проверяется автоматически)
Структура выборки и использование:
- Доставка
- может создать Пересылка
- Можно переопределить именования
- Может пересылку пакета
- должны быть проверены руководителем
- Может генерировать таможенную документацию ...
- может создать Пересылка
class ShippingService : IShippingService
{
// Access corresponds to "Can create shipment" permission
public bool CreateShipment(string name)
{
...
// Check the function-specific permission dynamically.
if (!ConformsToNamingConvention(name) && !CheckPermission(Permissions.CanOverrideNamingConvention))
return false;
....
return true;
}
}
Я думаю, что мне нужно сделать, это создать политику пользовательских авторизации путем реализации IAuthorizationPolicy. Это приведет к подключению к базе данных, выберет разрешения для пользователя и добавит заявку на каждое из разрешений. Затем мне нужно создать собственный диспетчер авторизации, который будет сравнивать запрошенное действие со списком претензий, чтобы определить, разрешен ли подключаемый пользователь.
Является ли это правильный способ приблизиться к этому, или я:
а) усложнять вопрос или
б) с использованием компонентов WCF неправильно (например, претензии, IAuthorizationPolicy, AuthorizationManager ...)
Заранее благодарим за любую помощь и наилучшие пожелания.
Я удалил роли аспекта этого вопроса после того, как marc_s сделал хороший пункт о том, как я планировал (MIS) использовать роли. – Malcolm