【问题标题】:ASP.NET, SilverLight, WCF & Forms Authentication - How to configure endpoints?ASP.NET、SilverLight、WCF 和表单身份验证 - 如何配置端点?
【发布时间】:2009-11-20 17:57:56
【问题描述】:

我有这个现有的环境:

1) ASP.NET 3.5 网络应用程序

2) 使用 SqlMembershipProvider 进行表单身份验证

我需要添加以下内容:

1) 嵌入网页中的 Silverlight 图表对象。

2) 一个 WCF 服务将被以下用户使用:

 a) the Silverlight component embedded in an authenticated 
       web page, as mentioned above

 b) server-based WCF clients with certificate based authentication

我的问题是 - 为 Silverlight 对象配置 WCF 端点以使用已登录用户的安全上下文对 WCF 服务进行身份验证的最简单/最佳方法是什么(通过托管 Silverlight 对象的页面)无需再次使用用户的用户名/密码?

我研究了很多 MSDN 和 Patterns & Practices 材料,并且我认为我对许多潜在的身份验证方案都有相当的了解。但我似乎无法找到一种方法将它们联系在一起,以应对我所概述的场景。我发现其他人向我发布了类似的问题,但我读过的答案似乎也没有完全回答他们的问题。 (也许我让这变得比需要的更难?)

我认为解决方案是以某种方式使用在 asp.net 表单登录中生成的身份验证令牌/cookie,并以某种方式将其传递给 Silverlight 对象,然后将其包含在 WCF 请求中。但我看不到如何配置 WCF 端点以使用该令牌。

(在我的其他一些项目中,我使用基于证书的身份验证在上面的 2.b 中实现了服务器到服务器的场景,所以我不太担心将其添加到我概述的当前组合中.)

在此先感谢您提供任何见解或对前进道路的指示。

特里

【问题讨论】:

    标签: wcf silverlight forms-authentication asp.net-3.5


    【解决方案1】:

    感谢 codemeit 的帮助,但我终于弄清楚我做错了什么——这是飞行员的错误。

    在尝试为我的 Silverlight 应用程序配置端点时,我正在使用一个 asp.net 页面进行测试。我终于意识到,当我以这种方式进行测试时,客户端端点不再源自经过身份验证的浏览器 - 客户端端点是 IIS 服务器,它反过来对 WCF 服务器端点执行请求。因此安全上下文发生变化,并且 HttpContext.Current.User.Identity 在 WCF 服务器端点处始终为空。

    一旦我的测试 SL 应用程序在浏览器中运行,它会自动继承经过身份验证的浏览器的安全上下文,然后 HttpContext.Current.User.Identity 正确并在 WCF 服务器端点进行身份验证。

    【讨论】:

      【解决方案2】:

      您是否尝试过启用与 aspNet 兼容的 WCF 服务,然后查看以下是否属实。

      string currentUserName = HttpContext.Current.User.Identity.Name;
      bool isLoggedIn = HttpContext.Current.User.Identity.IsAuthenticated;
      

      如果这些属性是用预期值填充的,那么这就是你所追求的。

      启用 aspNet 兼容性

      添加到 web.config

      <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
      

      添加到服务实现类

      [AspNetCompatibilityRequirements
        (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
      

      在这种情况下,端点将使用 basicHttpBinding,您可以在运行时在 WCF 中检查身份验证。

      【讨论】:

      • 我已经测试了所有这些东西。当我将授权设置为deny users="?" 时,我得到一个 System.ServiceModel.ProtocolException,因为默认 login.aspx 页面作为 WCF 响应返回。如果我在发出 WCF 请求之前删除拒绝用户设置并登录,然后发出 WCF 请求,则 HttpContext.Current.User.Identity.Name 为空且 .IsAuthenticated 为 false。真的感觉我在某处遗漏了一些简单而明显的东西......我尝试手动滚动客户端和服务器端点,还尝试使用启用 SL 的 WCF 模板和“添加服务引用”向导
      • 请查看msdn.microsoft.com/en-us/library/bb398990.aspx,这是公开身份验证服务的示例,但 WCF 确实使用表单身份验证。希望它能给你一个线索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多