2012-03-13 2 views
1

Я пишу Служба передачи данных WCF REST. Мне нужно добавить систему авторизации на основе логина и пароля, заданных url addres (https).Выполнение авторизации в Wcf Служба данных

В каждом URL должен быть логин и пароль:

https://myservice.svc/Products()?$orderby=name&login=user_login&pass=user_pass 

А на стороне службы Я хочу сделать разрешение. Необходимо проверить, имеет ли пользователь разрешение на доступданные. В этом случае необходимо проверить, имеет ли пользователь роль для чтения таблиц Products. Роли хранятся в базе данных.

Есть ли возможность сделать это?

+1

Уверен, что у вас есть возможность это сделать, но я сомневаюсь в мудрости включения имени пользователя и пароля в URL. WCF предоставляет вам несколько способов аутентификации абонентов. Что с ними не так? –

+0

Эй, ничего страшного с ними, но мне нужна более сложная функциональность. Этот пример выше - это только образец, который может помочь мне решить мою проблему. – nosbor

+0

Не помещаете ли пароль в URL-адрес, чтобы он был полностью небезопасным и победил точку использования https? Вместо этого вы должны рассмотреть вопрос о вводе данных для входа в качестве сообщения в своем сервисе .. или просто использовать HTTP Basic Authentication – Seph

ответ

0

Внедрение метода OnStartProcessingRequest.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    public class ServiceODataAFR : EntityFrameworkDataService<PortalContext> 
    { 
     public static void InitializeService(DataServiceConfiguration config) 
     { 
      ValidarAcesso(); 

      config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; 
      config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
     } 

     protected override void OnStartProcessingRequest(ProcessRequestArgs args) 
     { 
      ValidarAcesso(); 

      base.OnStartProcessingRequest(args); 
     } 

     private static void ValidarAcesso() 
     { 
      using (var context = new PortalWeb()) 
      { 
       if (!context.UsuarioEstaNoGrupo(EnumGrupoPermissao.AdministradorAFR.GetTitle())) 
       { 
        throw new AddressAccessDeniedException(); 
       } 
      } 
     } 
Смежные вопросы