2011-06-22 46 views
1

我有一個WCF服務託管在ASP.NET MVC Web應用程序內的IIS 7.0/7.5中(通過使用帶有ServiceHost指令的.svc文件)。在我的配置安全設置看起來像這樣:使用ASP.NET成員身份,角色和配置文件進行WCF身份驗證

<services> 
    <service name="MyServiceLib.MyService"> 
    <endpoint address="" binding="wsHttpBinding" 
       bindingConfiguration="wsHttpBindingConfig" 
       contract="MyServiceLib.IMyService" /> 
    </service> 
</services> 

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpBindingConfig"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="None" /> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <userNameAuthentication 
      userNamePasswordValidationMode="MembershipProvider" 
      membershipProviderName="AspNetSqlMembershipProvider"/> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

正如你可以看到我使用SSL傳輸安全性,然後用對ASP.NET成員資格提供用戶名和密碼進行身份驗證。迄今爲止,這工作得很好。

但是我想限制對此服務的訪問權限,不僅限於已通過身份驗證的用戶,還會限制具有特定角色並在其個人檔案中設置了特定值的用戶。 (我在Web應用程序中使用SqlProfileProvider,並且每個用戶都有一個指定了特定值的配置文件。)

是否可以通過配置設置實現此目的?如果沒有,我可以在服務端創建某種自定義身份驗證,這將允許我從傳入消息中檢索用戶和密碼,然後檢查成員身份和角色,並從配置文件存儲區中取出配置文件?我怎樣才能做到這一點?

回答

1

Enable WCF Role Service怎麼樣?

否則,您可以implement your own authentication method。你告訴WCF我們想自己驗證一個用戶(執行你自己的檢查總和/驗證方法)

+0

嗯,我不確定這個角色服務是否有幫助。說明如下:*「本主題顯示如何在Web服務器上配置ASP.NET角色服務,以使其可供使用Windows Communication Foundation(WCF)的客戶端使用。」*但我不想讓角色可用客戶端,我也無法確保客戶端使用WCF。我只想檢查傳入的用戶名是否在特定角色中,純粹是在服務器端。 – Slauma

+0

@Slauma:如何啓用[aspNetCompatibilityMode](http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx)? –

+0

我認爲,WCF角色服務只是另一個目的 - 無論有沒有「aspNetCompatibilityMode」 - 比我需要的。但是自定義驗證實際上很容易實現並且工作正常。感謝您的提示! – Slauma

1

那麼,你可以通過用'PrincipalPermissionAttribute'來限制對服務中方法的訪問,

[的PrincipalPermission(SecurityAction.Demand,角色= 「用戶」) 公共無效的MyMethod(){...

您需要配置該服務使用角色提供:

<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" />

但這隻會幫助角色。我認爲沒有任何東西可以幫助檢查用戶配置文件中的值:您可能會考慮在方法體內手動執行此操作。

+0

我試過了,但我總是得到一個異常:*「請求主體權限失敗。」* - 無論用戶是否在我指定的角色中。這可能只適用於Windows身份驗證中的用戶組,而不適用於ASP.NET角色? – Slauma

+0

它適用於角色。我正在使用它... – TheNextman

+1

您需要配置服務以使用角色提供者: TheNextman

相關問題