[英]Windows authentication in SilverLight Application (not Silverlight Business Application)
[英]Forms Authentication for a Silverlight application in Windows Azure
我正在将n层Silverlight应用程序迁移到Windows Azure,但遇到了麻烦。 登录后,Web服务将无法确定谁已通过身份验证。 我的云项目有两个角色:
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 FormsAuthentication.SetAuthCookie(username, myVar);
。 然后,将用户重定向到包含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角色合并?
这两个角色上的机器密钥相同。
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角色可以更好,更快地服务于Web页面。
这有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.