c# - Windows Azure 中 Silverlight 应用程序的表单例份验证

标签 c# silverlight forms authentication azure

我正在将 n 层 Silverlight 应用程序迁移到 Windows Azure,但遇到了困难。一旦我登录,网络服务就无法知道谁通过了身份验证。我的云项目有两个角色:

  • 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 。然后,用户被重定向到 Default.aspx其中包含 Silverlight 应用程序。

启动时,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 角色合并?

两个角色的机器 key 是相同的。

最佳答案

据我所知,这两个角色不会共享 cookie。

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

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

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

token 一旦被 Web 服务解密,就包含登录用户的 ID。

现在,Silverlight 客户端可以访问无状态 Web 服务,并且该 Web 服务知道该请求与哪个登录用户相关。

我将 WebService 和 WebRole 分开,以便服务可以处理 CPU 繁重的工作,而让 Web 角色更好、更快地为网页提供服务。

这有帮助吗?

关于c# - Windows Azure 中 Silverlight 应用程序的表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889877/

相关文章:

c# - 在 Silverlight 中调用 Dispatcher.CheckAccess() 是好的形式吗?

c# - 无法将 List<List<int>> 转换为返回类型 IList<IList<int>>

c# - 指纹读取器或拇指读取器

c# - 调整大小后渲染到纹理失败

c# - 如何使用 Include() 只获取第一个元素?

c# - 自定义画笔 - 我想要两个渐变将它们链接在一起

c# - 为Silverlight边框动态添加阴影效果?

javascript - 同一页面上的两个表单不断联系

javascript - 添加和删​​除 ExtJS 表单字段时出现问题

php - 一种表单中的常规按钮和提交按钮不起作用