У меня есть служба WCF с несколькими операциями, предоставляемыми как RESTful API. Большинство операций в сервисе не требуют аутентификации / авторизации, но одна или две из них. Политика авторизации, которую я должен использовать, находится вне моего контроля и требует больших затрат. Поэтому я хотел бы избегать его использования в тех операциях, которые в нем не нуждаются.
Похоже, что политики авторизации, определенные в конфигурации, должны применяться ко всей службе - их невозможно применить к выборочным операциям. Это означает, что мне нужно придумать другой механизм для выборочного применения политики авторизации к конкретным операциям.
Поведение при работе не помогает, поскольку коллекция ServiceSecurityContext.AuthorizationPolicies
доступна только для чтения.
Разделение моего сервиса на два контракта - авторизованный и неавторизованный - является грязным и не поможет в любом случае. Чтобы настроить отдельные варианты поведения, мне потребуются отдельные службы (а не отдельные контракты, реализованные одной службой), чтобы у каждого из них было свое имя в целях настройки. Отдельные сервисы подразумевают отдельные файлы .svc, указывающие на эти сервисы, поэтому все мои URL-адреса RESTful будут меняться, если у меня не будет какой-то сумасшедшей схемы перезаписи URI. Это, кажется, требует больше работы, чем нужно, чтобы это произошло.
Я начинаю думать, что единственный разумный способ сделать это - написать собственную политику авторизации, которая оборачивается дорогой, и вызывать ее только для операций выбора. Конечно, мне нужен какой-то способ идентификации этих операций, но я перейду этот мост, когда подойду к нему.
Как я могу выборочно применять политику авторизации к сервисным операциям? Есть ли более простой способ?