Токен авторизации WCF со смешанными клиентами - PullRequest
0 голосов
/ 10 августа 2011

Я работаю над некоторыми службами WCF для приложения, которое не только используется нашим веб-приложением, но также может использоваться из внутренних приложений наших клиентов.Поскольку мы не будем знать, в какой среде могут находиться внутренние клиентские приложения, мы пойдем по пути наименьшего общего знаменателя.

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

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

Я почти перешел к возвращаемому значению метода AfterCall инспектора параметров, но это позволяет выполнять метод.

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

Кто-нибудь нашел хороший способ сделать это?

Спасибо, Пол

1 Ответ

0 голосов
/ 10 августа 2011

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

Если вы все еще хотите пойти по этому пути, вы могли бы просто написать пользовательский IParameterInspector которые вы можете прикрепить к сервисам, используя поведение.Затем просто переопределите метод BeforeCall и проверьте там токен.

...