У нас есть служба WCF 4.5, и мы пытаемся ее закрепить.Проверка подлинности WCF + авторизация
У нас есть пользователи в нашей схеме базы данных, но то, что мы хотим сделать, это операции, как
[OperationsContract]
void PostMessage(string message, int userId)
//used ID is supposed to be id of user who post message
наша служба обеспеченному basicHttpsBinding с базовым разрешением. я могу получить имя пользователя пользователя, доступ к этому методу с:
ServiceSecurityContext.Current.PrimaryIdentity.Name
Но как я могу добавить его идентификатор базы данных в PrimaryIdentity. Другими словами, как проверить, что он пользователь с именем пользователя «Джон» может отправлять только его userId. Какая лучшая технология для его проверки?
Также возможно, что переменная STATIC (Current) отличается для каждого запроса. Мы используем стандартный экземпляр WCF, который является ... PerSession. Итак, как можно иметь статическую переменную, различную для каждого запроса.
Он чувствует себя довольно хромым, чтобы запрашивать базу данных для пользователя по его имени пользователя для каждого запроса.
И это именно то, что я делаю. НО что, если ... представьте, что ... один пользователь создал учетную запись, и я проверяю его против db ... это нормально, тогда ... но ЧТО, если он действительно имеет значение и посылает мне свойство userId какое-то другое число, чем его собственный идентификатор , Я не хочу идти в DB AGAIN только для своего идентификатора пользователя по имени, которое я получаю от ServiceSecurityContext. – LightCZ
Тогда у вас есть два варианта. Первый заключается в том, чтобы защитить вашего клиента, чтобы разрешить передачу идентификатора, отличного от текущего зарегистрированного идентификатора учетной записи пользователя. Во-вторых, лучше, потому что более безопасно проверять идентификатор и имя пользователя ServiceSecurityContext в методе 'PostMessage'. Еще одна вещь, если дело касается безопасности/целостности данных, выполняющих еще одну команду с базой данных, - это ** ничего ** по сравнению с тем, кто, как вы сказали, может отправить вам свойство идентификатора пользователя, отличное от его собственного идентификатора. – MacGyver
ОК, это допустимый аргумент. Но он просто чувствует себя хромым, чтобы перейти к базе данных дважды для одного и того же объекта по одному ключу. Один раз для passwordValidation и второй раз для идентификатора пользователя. И по имени пользователя. – LightCZ