Как отключить авторизацию утверждений по запросу (на основе URL) в WCF?

У меня есть служба WCF, которая использует авторизацию на основе утверждений.

Что я хочу сделать, так это атрибутировать операцию с ClaimsPrincipalPermissionAttribute и иметь триггер проверки авторизации только один раз в моем пользовательском ClaimsAuthorizationManager. Однако я обнаружил, что эта проверка авторизации запускается дважды; один раз для URL-адреса, а затем второй раз для самой операции.

Я не могу найти много информации по этому вопросу, но то, что я нашел, указывает на то, что это сделано по замыслу. Могу ли я перезаписать это поведение и не выполнять никакой авторизации по URL-адресу, а только авторизацию на основе операции?

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

Я прочитал несколько статей и посмотрел видео Доминика Байера на эту тему, и хотя я многому научился из них, я до сих пор не могу найти ответа на этот вопрос. Это просто невозможно, и мне просто нужно иметь дело с авторизацией на основе URL-адреса?


person Kieran Hayes    schedule 15.11.2013    source источник


Ответы (1)


Вы не можете изменить это поведение — я написал собственный атрибут разрешения утверждений, который выдает различные типы утверждений. Таким образом, я мог различать вызов для каждого запроса и явный атрибут.

https://github.com/thinktecture/Thinktecture.IdentityModel.45/tree/master/IdentityModel/Thinktecture.IdentityModel/Authorization

или пакет nuget Thinktecture.IdentityModel.

person leastprivilege    schedule 16.11.2013
comment
Ах, я вижу, разумная работа, я думаю - спасибо. Я думал, что мне не хватало какой-то точки расширения, которая позволила бы мне полностью переопределить поведение. - person Kieran Hayes; 16.11.2013