Silverlight+ASP.NET MVC+表单身份验证 = WCF 中没有身份验证
我有一个带有表单身份验证的标准 ASP.NET MVC 站点。 用户通过网页登录。然后他们就可以访问 silverlight 应用程序。当他们登录时,我向他们传递一个表单身份验证 cookie,就像任何其他站点一样:
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
XAP 文件位于 ~/ClientBin/ 文件夹中。 SVC 文件位于 ~/Services/ 文件夹中。匿名访问被阻止:
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
Silverlight 对 SVC 的调用会导致 HTTP 302 弹回登录页面,并使 Silverlight 崩溃。 :( 仅当禁用匿名访问时才会发生这种情况。我认为 Silverlight 不会随 WCF 服务调用一起传递 cookie。为什么不呢?
我确保使用文档中定义的 AspNetCompatibilityRequirements (http://msdn.microsoft.com/en-us/library/dd560702(VS.95).aspx):
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class TaskSchedulerService : ITaskSchedulerService
{
并且我的 web.config
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
使用 basicHttpBinding 或 customBinding 会发生同样的事情启用二进制压缩。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好消息!我发现了这个问题...
我的 silverlight 应用程序经过编程,可以注入一个点“.”。调用 localhost 上的 Web 服务时输入 URL
(http://localhost/myservice.svc -> http://localhost./myservice.svc) 。
我特意添加了这个额外的点,以便我可以使用 fiddler 调试本地流量。我删除了点,身份验证工作了!额外的点被视为一个单独的域。
事实证明,使用 INTERNET EXPLORER 9,FIDDLER 可以在没有点的情况下调试本地流量。
正如 MSDN 文档所说:
底线:如果您正在开发 silverlight,IE9 是您最好的朋友。
Good news! I found the issue...
My silverlight application was programmed such that it would inject a dot "." into the URL when it called the web service on localhost
(http://localhost/myservice.svc -> http://localhost./myservice.svc).
I purposefully added this extra DOT so I could debug local traffic with fiddler. I removed the dot, and authentication works! The extra dot was percieved as a separate domain.
It turns out that WITH INTERNET EXPLORER 9, FIDDLER CAN DEBUG LOCAL TRAFFIC WITHOUT THE DOT.
As the MSDN Dcoumentation says:
Bottom line: if you are developing silverlight, IE9 is your best friend.