ASP.NET,SilverLight,WCF&表单身份验证 - 如何配置端点?

时间:2009-11-20 17:57:57

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

我有这个现有的环境:

  

1)ASP.NET 3.5 Web应用程序

     

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

我研究过很多MSDN和模式&实践材料,我认为我很好地掌握了许多潜在的身份验证方案。但我似乎无法找到一种方法将它们联系在一起,用于我所概述的场景。我发现其他人向我发布了类似的问题,但我读过的答案似乎都没有完全回答他们的问题。 (也许我正在变得比它需要的更难?)

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

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

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

特里

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您是否尝试使用aspNet兼容性启用WCF服务,然后查看以下内容是否正确。

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

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

启用aspNet兼容性

添加到web.config

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

添加到服务impl类

[AspNetCompatibilityRequirements
  (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]

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