【问题标题】:Silverlight+ASP.NET MVC+ Forms Authentication = no authentication in the WCFSilverlight+ASP.NET MVC 表单身份验证 = WCF 中没有身份验证
【发布时间】:2011-05-09 22:15:24
【问题描述】:

我有一个带有表单身份验证的标准 ASP.NET MVC 站点。 用户通过网页登录。然后他们可以访问一个 Silverlight 应用程序。当他们登录时,我向他们传递了一个表单身份验证 cookie,就像任何其他网站一样:

 FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);

XAP 文件位于 ~/ClientBin/ 文件夹中。 SVC 文件位于 ~/Services/ 文件夹中。匿名访问被阻止:

<configuration>
   <system.web>
     <authorization>
       <deny users="?"/>
     </authorization>
   </system.web>
</configuration>

对 SVC 的 Silverlight 调用导致 HTTP 302 弹回登录页面,并使 Silverlight 崩溃。 :( 这只发生在禁用匿名访问时。我认为 Silverlight 不会将 cookie 与 WCF 服务调用一起传递。为什么不呢?

我确保使用文档 (http://msdn.microsoft.com/en-us/library/dd560702(VS.95).aspx) 中定义的 AspNetCompatibilityRequirements:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class TaskSchedulerService : ITaskSchedulerService
{

我的 web.config 有

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>

使用启用 BinaryCompression 的 basicHttpBinding 或 customBinding 也会发生同样的情况。

【问题讨论】:

  • 在 firefox 中使用 firebug 检查您的站点,是否有 asp.net auth cookie 正在为 WCF 请求传输。
  • 你是对的。没有为请求传输身份验证 cookie!我希望在重定向之前有一个 HTTP 401 响应!为什么 silverlight 不发送 auth cookie?
  • cookie 传输是通过浏览而不是 SL 应用程序完成的。这可能是一个不同的域问题。 cookie 可能被指定用于与 WCF 服务不同的域。检查您的 MVC 应用程序 url 和 WCF url。还要检查 cookie 是否正在 MVC 应用程序中传输。

标签: asp.net-mvc wcf silverlight-4.0 forms-authentication


【解决方案1】:

好消息!我发现了问题... 我的 silverlight 应用程序被编程为它会注入一个点“。”当它在 localhost 上调用 Web 服务时进入 URL (http://localhost/myservice.svc -> http://localhost./myservice.svc)。

我特意添加了这个额外的 DOT,以便我可以使用 fiddler 调试本地流量。我删除了点,并且身份验证有效!额外的点被认为是一个单独的域。

事实证明,使用 INTERNET EXPLORER 9,FIDDLER 可以在没有 DOT 的情况下调试本地流量。

正如 MSDN 文档所说:

要从 Silverlight 应用程序使用该服务,不需要特殊步骤。以与调用非安全服务相同的方式调用该服务。调用服务时,如果用户没有登录到托管您的 Silverlight 应用程序的 ASP.NET 站点,或者如果用户无权调用服务,则会发生错误。因此,在使用安全服务时,优雅地处理错误情况尤为重要。

底线:如果您正在开发 Silverlight,IE9 是您最好的朋友。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2011-06-16
    • 2010-09-24
    相关资源
    最近更新 更多