在Wcf数据服务中授权

在Wcf数据服务中授权

问题描述:

我在写WCF REST数据服务。我需要根据url地址(https)给出的登录名和密码添加授权系统。在Wcf数据服务中授权

在每一个URL应该登录名和密码:

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

而且在服务端我要让授权。应该检查用户是否有权限访问数据。在这种情况下,应该检查用户是否具有读取表产品的角色。 角色存储在数据库中。

有没有机会做到这一点?

+1

我相信你有机会做到这一点,但我质疑网址中包含用户名和密码的智慧。 WCF为您提供了一系列验证呼叫者的方式。他们怎么了? – 2012-03-14 02:36:39

+0

嘿,它们没有错,但我需要更多的复杂功能。上面的这个例子只是一个可以帮助我解决问题的例子。 – nosbor 2012-03-14 16:27:44

+0

不会在URL中输入密码使其完全不安全并且无法使用https?相反,您应该考虑将登录详细信息作为您的服务中的发布内容..或仅使用HTTP基本身份验证 – Seph 2012-04-08 08:21:44

实现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(); 
       } 
      } 
     }