我正在开发一个连接到声明软件WCF服务的Silverlight 4应用程序。我使用以下代码来检索我的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>
答案 0 :(得分:1)
由于绑定问题以及SL(Windows / Forms / WIF /等)的客户端身份验证安全性,尝试直接从客户端调用此方法永远不会发生,但一种方法是使用RIA服务域身份验证通过WCF RIA Invoke端点从服务器端验证和调用服务的服务。用户的安全上下文代理到客户端,您可以通过线路直接隧道传输数据。
这可能会让你朝着正确的方向前进:
http://archive.msdn.microsoft.com/RiaServices/Release/ProjectReleases.aspx?ReleaseId=5617
答案 1 :(得分:1)
Silverlight不支持基于声明的授权和WS-Trust。微软本来打算把它放到Silverlight 5中,但不幸的是忘了这样做。
然而,Identity Training Kit中提供了非常优雅且可用的“Silverlight”版本的WIF IdentityModel。
该解决方案包括一个基本AuthenticationService,用于将WIF身份验证令牌转换为声明服务器端,以及一个Silverlight客户端库“SL.IdentityModel”,其中包含构建块,例如ClaimsPrincipal的Silverlight版本。
获取身份培训工具包here。查看Silverlight实现示例。