2011-05-19 42 views
2

我正在处理连接到声明ware WCF服务的Silverlight 4应用程序。我正在使用以下代码来检索我的WCF中的声明令牌以执行授权。从Silverlight访问声明感知WCF

IClaimsPrincipal principal = (IClaimsPrincipal)Thread.CurrentPrincipal; 
IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; 
return string.Format("You entered: {0} and you are {1}", value, identity.Name); 

当我在WCF中使用wsHttpBinding并用控制台应用程序试用它时,它工作正常。但由于Silverlight只支持basicHttp和customeBinding,我不能使用wsHttp,ws2007Http或其他任何绑定。其中,我没有从我的Silverlight的WCF中获取IClaimIdentity标记。

有没有什么办法可以使用任何Silverlight支持绑定,并仍然在我的WCF中获得ClaimIdentity。是否有任何教程/帮助文本,我可以阅读有关这方面的更多信息。

我的WCF的设置是:

<system.serviceModel> 
    <services> 
     <service name="ClainAwareWCF.Service" behaviorConfiguration="ClainAwareWCF.ServiceBehavior"> 
     <endpoint address="" binding="basicHttpBinding" contract="ClainAwareWCF.IService" bindingConfiguration="basicbind"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicbind"> 
      <security mode="TransportCredentialOnly"></security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ClainAwareWCF.ServiceBehavior" > 
      <federatedServiceHostConfiguration/> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <extensions>  
     <behaviorExtensions> 
     <add name="federatedServiceHostConfiguration" type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
     </behaviorExtensions> 
    </extensions> 
    </system.serviceModel> 

回答

1

试图直接从客户端调用这个永远不会因的结合问题,也因为SL的客户端验证意识安全(在Windows /表格/ WIF /等发生),但一种方法是使用RIA服务域身份验证服务通过WCF RIA Invoke端点从服务器端进行身份验证和调用服务。用户的安全上下文被代理到客户端,您可以通过线路直接隧道传输数据。

这可以让你在正确的方向:基于授权和WS-Trust开箱

http://archive.msdn.microsoft.com/RiaServices/Release/ProjectReleases.aspx?ReleaseId=5617

1

Silverlight的支持doesn't索赔。微软打算把它放到Silverlight 5中,但遗憾的是忘记了这么做。

然而,有一个非常优雅和可用的“Silverlight”版本的身份培训工具包中提供的WIF IdentityModel的东西。

该解决方案由碱的AuthenticationService该转换WIF认证令牌权利要求服务器端,和一个Silverlight客户端库“SL.IdentityModel”含有积木诸如ClaimsPrincipal的一个Silverlight版本。

获取身份培训工具包here。查找示例Silverlight实现。

+0

雅,我最终使用了。非常感谢.... – Bhaskar 2012-06-25 14:02:20