Могу ли я проверить токены подписи HTTP-запроса и одноразовые номера с помощью привязки модели? - PullRequest
2 голосов
/ 20 июня 2011

Я настраиваю конечную точку, используя ASP.NET MVC, к которой могут быть сделаны запросы на манипулирование и получение данных (в основном, API). Я использую двухстороннюю модель OAuth для проверки того, что запросы должны быть подписаны с использованием секретного ключа и метода подписи, а также таблицы nonce для предотвращения хай-джеккинга.

Поскольку привязка модели очень удобна в ASP.NET MVC, я собираюсь воспользоваться ею для использования запросов, но мне интересно, могу ли я испечь проверку подписи и обработку nonce / timestamp прямо в связывателе модели. Это возможно? Таким образом, я могу просто повторно использовать реализацию в различных действиях, которые я создаю.

1 Ответ

1 голос
/ 21 июня 2011

Я считаю, что вы должны быть в состоянии. Попробуйте это:

public class FooModelBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            FooModel fooModel = bindingContext.Model as fooModel;
            if (fooModel != null)
            {
               // Do your verification stuff in here
               // Updating any properties of your Model.
               // Or you could retrieve something else entirely and return it if you like
               // Let's pretend we just want to verify the model and set some property or other.
               fooModel.NonceOkay = DoVerification(fooModel);
               fooModel.NextAction = WorkOutWhereToGoNext(fooModel);
               // or whatever
            }
            return fooModel;
        }
    }

DoVerification может жить в вашем ModelBinder, но для него может быть лучше жить в другом месте.

Затем вставьте это в Application_Start в вашем Global.asax:

ModelBinders.Binders.Add(typeof(Foo), new FooModelBinder());
...