2011-09-22 46 views
1

對於WCF,ASP.Net和身份驗證/授權知之甚少,我很難解釋什麼困擾着我。對MVC和WCF上的用戶進行身份驗證和授權

我正在使用ASP.Net MVC 3應用程序作爲我正在開發的系統的前端。該網站與WCF網絡服務進行對話,並從中獲取所有信息。

會有預定義的用戶,並且每個用戶都有唯一的訪問權限(因此某個操作可能會在特定於該用戶的信息中解析)。另外用戶的登錄信息將被存儲在服務端。

現在的問題是,我如何處理認證和/或授權?

我希望用戶能夠登錄到網站,所以我想他會做一個驗證呼叫到Web服務,如果驗證設置了forms.authentication cookie客戶端端。

然後,如果他提出了像ChangePassword這樣的新請求(對他來說是唯一的),我是否應該再次驗證他?也許已經創造了一個令牌讓他發送他的請求?

難道我也許只是做所有的驗證服務端即使如此,該服務知道用戶是誰,只返回與他有關(數據,而不必特別提到他在方法調用?

是否服務這樣的區別在於客戶端網站的授權和用戶本人之間有什麼不同?我的意思是我想確保所使用的工具都是合法的,並且用戶正在嘗試執行的操作可以。

I'我很難理解所有這些是如何協同工作的,並且希望能夠解釋如何工作,而不是如何做到這一點的教程(就像谷歌搜索一樣)。

回答

1

「我有一個很難理解這一切是如何一起工作」

這是WCF的一個很好的總結。 :)

WCF將使用成員/角色提供程序進行登錄。他們需要在配置文件的serviceModel部分進行配置。

您的服務的用戶將使用代理的用戶名/密碼屬性,或者如果不使用生成的代理,它們必須自己生成ws-security xml配置。

我已經刪除了一切,但會員/角色的東西,所以這不(可能)工作配置部分。

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyCompany.Api.Services.WebService.MyProductServiceBehavior"> 
     <serviceCredentials> 
     <userNameAuthentication 
     userNamePasswordValidationMode="MembershipProvider" 
     membershipProviderName="MyCompanyMembershipProvider" /> 
     </serviceCredentials> 
     <serviceAuthorization principalPermissionMode='UseAspNetRoles' roleProviderName='MyCompanyRoleProvider' /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="MembershipBinding"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="None" /> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="MyCompany.Api.Services.WebService.MyProductServiceBehavior" name="MyCompany.Api.Services.WebService.MyProductService"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MembershipBinding" contract="MyCompany.Api.Services.WebService.IMyProductService" /> 
    </service> 
</services> 

下面是使用生成的代理的例子:

 api = new MyProxyService.MyProxyServiceClient(); 

     api.ClientCredentials.UserName.UserName = userAcct; 
     api.ClientCredentials.UserName.Password = password; 

     api.MethodCall(); 
+0

現在好了,我只是得到了更多的困惑。 MVC項目中的MembershipProvider將如何受此影響。我可以從MVC項目訪問服務membershipProvider嗎?即使他們使用相同的提供者,它也不能是相同的實例。 –

+0

我們有一個WCF Web服務項目和一個mvc 3 web項目。他們都使用共享程序集中的通用成員/角色提供者。 – BNL

+0

好吧,仍然不明白。用戶在網站上登錄,該服務如何知道? WebSite和Service如何使用membershipProvider認證進行交互?合同是否會自動傳輸Cookie信息,還是必須編寫一些代碼? –