2012-08-09 101 views
1

我正在將一個n層的Silverlight應用程序遷移到Windows Azure,並且我碰到了一堵磚牆。一旦我登錄,Web服務無法知道誰被認證。我的雲項目有兩個作用:Windows Azure中的Silverlight應用程序的表單身份驗證

  • 的Web UI:在Azure上,它的IP是111.222.33.44:80
  • Web服務:在Azure上,它的IP是111.222.33.44:8080

配置的Web UI:

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Forms"> 
     <forms name="COOKIENAME" loginUrl="~/Login/login.aspx" timeout="2880" /> 
    </authentication> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
    <machineKey validation="SHA1" decryption="AES" validationKey="VKEY" decryptionKey="DKEY"></machineKey> 
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 
</system.web> 

配置的Web服務

<system.web> 
    <authentication mode="Forms"> 
     <forms name="COOKIENAME" loginUrl="~/Login/login.aspx" timeout="2880" /> 
    </authentication> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
    <machineKey validation="SHA1" decryption="AES" validationKey="VKEY" decryptionKey="DKEY"></machineKey> 
</system.web> 

在Web UI角色中,Login/login.aspx提交用戶名和密碼。使用方法FormsAuthentication.SetAuthCookie(username, myVar);創建cookie。然後,用戶被重定向到包含Silverlight應用程序的Default.aspx

當它啓動時,Silverlight應用程序通過返回HttpContext.Current.User.Identity.Name從Web服務角色獲取用戶名。

在本地雲模擬器中一切正常,但是當我在Windows Azure中部署項目時(暫存),Web服務並不知道我已連接。我使用Fiddler,並且我看到頁面111.222.33.44:8080/Login/login.aspx被查詢(頁面不存在於Web服務角色中,這是一種知道用戶是否被認證的方式)。

我懷疑Web服務無法檢索用戶名,因爲它無法檢索由Web UI角色創建的Cookie。實際上是否可以使其工作,還是必須將Web服務角色與Web UI角色合併?

這兩個角色的機器密鑰是相同的。

+0

這些部署是作爲單個包還是每個角色的包(即:單獨部署)? – 2012-08-10 14:44:37

回答

0

AFAIK這兩個角色不會共享一個cookie。

在類似的情況下,我有一個託管Silverlight客戶端的Web項目以及Silverlight應用程序使用的Web服務。

用戶將登錄到網站並訪問silveright客戶端。客戶一直在使用param屬性

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2">     
    <param name="Token" value="<%=Token %>" /> 

的令牌,一旦通過Web服務解密提供網絡服務身份驗證令牌,包含了登錄用戶的ID。

現在,Silverlight客戶端可以訪問無狀態Web服務,並且Web服務知道該請求與哪個登錄用戶相關。

我將WebService和WebRole分離開來,以便CPU可以處理繁重的作業,使Web角色能夠很好並且快速地爲網頁提供服務。

這有幫助嗎?

+0

這是否意味着您的Web服務必須允許任何用戶?其中一個要求是讓Web服務拒絕匿名用戶。 – mabelleau 2012-08-16 14:17:01

相關問題