Каков наилучший подход к реализации авторизации/аутентификации для приложения Windows Forms, связанного с службой RESTful WCF, размещенной в IIS?
Причина, по которой я спрашиваю, я очень смущен, после просеивания через разные статьи и сообщения, выражающие другой метод и в конечном итоге попадающий на документ с 650 документами по лучшим требованиям WCF "( http://www.codeplex.com/WCFSecurityGuide) Я просто не знаю, какой из подходов BEST взять и как начать работу, учитывая мой сценарий.
Я начал с этой статьи "Руководство по проектированию и созданию веб-служб RESTful с помощью WCF 3.5" (http://msdn.microsoft.com/en-us/library/dd203052.aspx) и PDC видео на RESTful WCF-сервисах, что было здорово и помогло мне реализовать мою первую службу WCF, ориентированную на REST,
После того, как я работал с сервисом, я вернулся для обеспечения безопасности. "Вопросы безопасности" (в квартал вниз по странице) и попытался реализовать заголовок HTTP-авторизации в соответствии с инструкциями, однако я обнаружил, что код является неполным (см., Как никогда не объявлялась переменная UserKeys). Это тот момент, когда я пытался больше исследовать, как это сделать (используя хеш-память HMAC с HTTP-заголовком "Authorization", но не смог найти многого в google?), Это привело меня к другим статьям, касающимся безопасности на уровне сообщений, формы auth и пользовательские валидаторы, и, честно говоря, я не уверен, какой из них лучше всего подходит.
Итак, со всем сказанным (и спасибо за прослушивание до сих пор!), я думаю, мои основные вопросы:
- Какую реализацию безопасности следует использовать?
- Есть ли способ избежать отправки имени пользователя/пароля при каждом вызове WCF? Я бы предпочел не отправлять эти дополнительные байты, если соединение было установлено в начале, которое будет до того, как последующие вызовы будут разрешены после входа в систему.
- Должен ли я действительно быть обеспокоен чем-либо другим, кроме обычного текста, если я использую SSL?
Как сказано, приложение .NET 3.5 win forms, служба WCF, поддерживаемая IIS, однако важно, чтобы я хотел, чтобы все службы WCF требовали эту процедуру авторизации (как бы она ни была, сессия, http-заголовок или как-то иначе), поскольку Я не хочу, чтобы кто-нибудь мог ударить по этим сервисам из Интернета.
Я знаю, что вышеупомянутый пост большой, но мне пришлось выразить маршрут, который у меня уже был, и что мне нужно выполнить, всякая помощь приветствуется.
PS: Мне также известно об этом сообщении Как настроить безопасные службы RESTful с помощью WCF с использованием имени пользователя/пароля + SSL, и если сообщество предложит мне отойти от REST для служб WCF я могу это сделать, однако я начал с этого, чтобы поддерживать согласованность для любых публичных API-интерфейсов.
Я думаю, что важно указать, как я обращаюсь к моей службе WCF (обращение к службе работает, но что является лучшим способом проверки учетных данных - и затем вернуть объект Member?):
WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>(
new Uri(Properties.Settings.Default.MemberServiceEndpoint));
IMemberService channel = cf.CreateChannel();
Member m = channel.GetMember("user", "pass");
Код, который был частично реализован из статьи MS (и некоторые из моих собственных для тестирования):
public Member GetMember(string username, string password)
{
if (string.IsNullOrEmpty(username))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Username must be provided.", null);
if (string.IsNullOrEmpty(password))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Password must be provided.", null);
if (!AuthenticateMember(username))
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return null;
}
return new Member() { Username = "goneale" };
}