我正在將一個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角色合併?
這兩個角色的機器密鑰是相同的。
這些部署是作爲單個包還是每個角色的包(即:單獨部署)? – 2012-08-10 14:44:37