1

我正在将一个 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 角色合并?

两个角色的机器密钥是相同的。

4

1 回答 1

0

AFAIK 这两个角色不会共享 cookie。

在类似的情况下,我有一个托管 silverlight 客户端的 web 项目,以及 silverlight 应用程序使用的 web 服务。

用户将登录网站并访问 silveright 客户端。已使用 param 属性为客户端提供了 Web 服务身份验证令牌

<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 角色能够快速快速地为网页提供服务。

这有帮助吗?

于 2012-08-13T08:17:44.997 回答