我正在将一个 n 层 Silverlight 应用程序迁移到 Windows Azure,但遇到了困难。登录后,Web 服务无法知道谁通过了身份验证。我的云项目有两个角色:
- Web UI:在 Azure 上,它的 IP 是 111.222.33.44:80
- Web服务:在Azure上,它的IP是111.222.33.44:8080
网页界面配置:
<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 提交用户名和密码。使用 方法创建一个 cookie FormsAuthentication.SetAuthCookie(username, myVar);
。然后,用户被重定向到Default.aspx
包含 Silverlight 应用程序的位置。
当它启动时,Silverlight 应用程序通过返回从 Web 服务角色获取用户名HttpContext.Current.User.Identity.Name
。
在本地云模拟器中一切都很好,但是当我在 Windows Azure(暂存)中部署我的项目时,Web 服务不知道我已连接。我使用了 Fiddler,我看到页面 111.222.33.44:8080/Login/login.aspx 正在被查询(该页面在 Web 服务角色中不存在,这是一种了解用户是否经过身份验证的方法)。
我怀疑 Web 服务无法检索用户名,因为它无法检索由 Web UI 角色创建的 cookie。是否真的可以让它工作,还是我必须将 Web 服务角色与 Web UI 角色合并?
两个角色的机器密钥是相同的。