Рассмотрим приложение, которое включает в себя набор веб-служб ReST, созданных с использованием ASP.NET 4 и собственных модулей C ++ IIS.
Нам необходимо иметь возможность поддерживать 2 политики проверки подлинности:
внутренние пользователи могут вызывать наши конечные точки ReST напрямую из другого клиентского приложения (скажем, реализованного в Silverlight или Java), где они уже аутентифицированы по внутреннему провайдеру единого входа, предоставляя маркер безопасностикак часть HTTP-вызова.
для тестирования, мы хотим разрешить пользователям доступ к конечной точке ReST через браузер, поэтому нам нужно разрешить им проходить аутентификацию, введя имя пользователя / пароль(который мы будем проверять по единому входу на веб-сервере).Для этого мы рассматриваем возможность использования ASP.NET Forms или Digest.
(поэтому в одном случае пользователь уже аутентифицирован - но нам нужно проверять это для каждого вызова, в другом случае мынужно попросить их предоставить учетные данные)
Вопрос в том, как поддержать эти 2 сценария.
Я не могу найти решение, которое будет работать в обоих случаях:
Если я получаю звонок из приложения (не из браузера) и токен отсутствует, я не могу перенаправить их в login.aspx, так как вызывающее нас приложение не знает, что делатьсделать с кучей HTML (форма входа).Мне нужно вернуть код ответа 401.
Однако, если мне позвонят из веб-браузера, который не прошел проверку подлинности, я не смогу вернуть 401, не предложив пользователю возможность вводаих учетные данные.
Кто-нибудь сталкивался с этой проблемой раньше?
Заранее спасибо.
PS Тот факт, что некоторые веб-сервисы будут реализованы на C ++усложняет ситуацию, но если мы пойдем с аутентификацией форм, по крайней мере, я смогу использовать интегрированный конвейер и использовать формы для собственного модуля.