Webhttp-привязка с HTTPS и аутентификация с UserNamepPasswordValidator при размещении в IIS

Я пытаюсь настроить службу WCF, размещенную в IIS, которая предоставляет конечную точку, которая действует как служба REST, генерирующая данные JSON, и я хочу использовать HTTPS. Я хочу сам позаботиться об аутентификации пользователей с помощью UserNamePasswordValidator, поскольку пользователи хранятся в базе данных.

В данный момент я использую webhttp-связывание для достижения REST-полноты. Моя проблема начинается, когда я пытаюсь включить HTTPS (установка режима безопасности на Транспорт). У меня есть сертификат SSL на стороне сервера (пока я сам подписан), так что это все хорошо, но я не знаю, как настроить транспортный clientCredentialType привязки, чтобы учетные данные передавались в мою реализацию UserNamePasswordValidator.

Я много гуглил, но не могу найти ничего хорошего. Если я правильно понимаю, IIS обрабатывает аутентификацию перед WCF, и с этим ничего не поделаешь? Я бы действительно предпочел не использовать поставщика членства ASP.Net, но, возможно, это подход или есть другой способ?

Спасибо!

Изменить: нашел это. Не совсем то, на что я надеялся...

2 ответа

Решение

После долгих поисков я нашел пару возможных решений.

Рекомендуемый способ решения проблемы аутентификации с помощью служб RESTful WCF, размещенных в IIS, заключается в использовании токенов. Либо с помощью сторонней реализации OAuth, либо для реализации чего-либо самостоятельно. Тем не менее, это вызовет некоторые проблемы с моей конечной точкой nettcp, и я, вероятно, не смогу использовать одну и ту же реализацию для обеих конечных точек (поскольку мне потребуется выполнить некоторую проверку токена для вызовов, поступающих через конечную точку webhttp)

Решение, данное Ладиславом Мрнкой, представляется также обоснованным.

Вы не можете использовать UserName учетные данные - это проверка подлинности на уровне сообщения через заголовок SOAP, но обмен данными JSON не имеет такого заголовка. Попробуйте настроить Basic учетные данные в транспортном элементе (= аутентификация транспортного уровня). Он должен работать с пользовательским средством проверки паролей начиная с.NET 3.5. Для успешной аутентификации вам придется передать действительный заголовок HTTP для базовой аутентификации.

Редактировать:

Я не тестировал его с IIS, поэтому могут возникнуть некоторые проблемы, поскольку IIS запускает аутентификацию перед выполнением пользовательского валидатора. В таком случае вам потребуется специальный HTTP-модуль для аутентификации.

Другие вопросы по тегам