Как аутентифицировать, фильтровать и проверять результат oData на основе WCF? - PullRequest
3 голосов
/ 09 ноября 2010

Может кто-нибудь сказать мне, возможно ли это сделать с помощью моего oData-фида на основе WCF, и позвольте мне указать, что искать или как начать?

1) Аутентификация - я хочу убедиться, что к службе oData обращается только тот, кто уже прошел аутентификацию с использованием системы членства ASP.NET

2) Фильтр - Предположим, я возвращаю список классов учеников ... Я хотел бы сделать так, чтобы ученики видели только те классы, в которые они записаны (на основе имени пользователя), а не те, которые посещают этот рай.еще не было опубликовано.

3) Проверка - Я не уверен, нужно ли это, но на случай, если какой-нибудь умный хакер найдет дыру в протоколе oData от MSFT, я быхотел бы проверить результаты моих данных Entity Framework перед потоковой передачей клиенту.Это будет применяться, если есть DAL-пакет, создавая проблемы с параллелизмом.См. 5:15 из этого видео для примера.

Тест, который я хочу сделать, заключается в проверке того, что каждая возвращаемая строка имеет столбец имени пользователя, равный текущему имени пользователя сеанса.

[EDIT]
4) Encrypt - Это похоже на # 3, но я хотел бы запутать первичный ключ перед его отправкой клиенту.В одном случае PK - это номер социального страхования, и я не хочу, чтобы он кэшировался или иным образом отправлялся в нисходящем направлении.Мне также нужно расшифровать это при записи oData.

1 Ответ

2 голосов
/ 10 ноября 2010

1) Аутентификация - как уже упоминалось выше в Coding Gorilla, в блоге WCF Data Services есть серия публикаций о том, как реализовать различные виды аутентификации.

2) Фильтр - это как раз то, для чего нужны перехватчики запросов. Смотрите, например, эту статью на MDSN http://msdn.microsoft.com/en-us/library/dd744837.aspx

3) Проверка - если вы считаете, что вам это действительно нужно, это может быть немного сложнее. В настоящее время WCF Data Services не имеет точки расширяемости, которую вы могли бы легко подключить, чтобы увидеть результаты записи. Возможно, вы сможете обернуть экземпляры IQueryable, возвращаемые EF, и выполнить проверку при перечислении результатов, но я еще не видел, чтобы это было сделано, поэтому не знаю, сработает ли это.

4) Это будет сложно только в службах данных WCF. Я бы попытался сделать это внутри EF один (не уверен, если это возможно, хотя). Проблема в том, что ключевые свойства используются для адресации сущностей, поэтому они отображаются в URL-адресах и запросах. Таким образом, вам нужно будет не только расшифровать их в полезных нагрузках, но и в самом запросе, что потребует много работы. Возможно, кто-то с большим опытом работы с EF знает, как сделать это в одиночку EF (в этом случае службы данных WCF увидят только зашифрованные значения, и все будет работать)

...