我有一個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,並且每個用戶都有一個指定了特定值的配置文件。)
是否可以通過配置設置實現此目的?如果沒有,我可以在服務端創建某種自定義身份驗證,這將允許我從傳入消息中檢索用戶和密碼,然後檢查成員身份和角色,並從配置文件存儲區中取出配置文件?我怎樣才能做到這一點?
嗯,我不確定這個角色服務是否有幫助。說明如下:*「本主題顯示如何在Web服務器上配置ASP.NET角色服務,以使其可供使用Windows Communication Foundation(WCF)的客戶端使用。」*但我不想讓角色可用客戶端,我也無法確保客戶端使用WCF。我只想檢查傳入的用戶名是否在特定角色中,純粹是在服務器端。 – Slauma
@Slauma:如何啓用[aspNetCompatibilityMode](http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx)? –
我認爲,WCF角色服務只是另一個目的 - 無論有沒有「aspNetCompatibilityMode」 - 比我需要的。但是自定義驗證實際上很容易實現並且工作正常。感謝您的提示! – Slauma