2012-03-13 101 views
1

我在寫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

回答

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