2

我正在开发一个连接到声明软件 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>
4

2 回答 2

1

由于绑定问题以及SL(Windows / Forms / WIF /等)的客户端身份验证意识安全性,尝试直接从客户端调用它永远不会发生,但一种方法是使用RIA服务域身份验证服务进行身份验证并通过 WCF RIA Invoke 端点从服务器端调用服务。用户的安全上下文被代理到客户端,您可以直接通过网络传输数据。

这可能会让您朝着正确的方向前进:

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

于 2011-05-19T14:59:57.000 回答
1

Silverlight 不支持开箱即用的基于声明的授权和 WS-Trust。微软打算把它放到 Silverlight 5 中,但不幸的是忘记了。

然而,在 Identity Training Kit 中有一个非常优雅且可用的 WIF IdentityModel 的“Silverlight”版本。

该解决方案包括将 WIF 身份验证令牌转换为声明服务器端的基本 AuthenticationService,以及包含构建块(例如 ClaimsPrincipal 的 Silverlight 版本)的 Silverlight 客户端库“SL.IdentityModel”。

在此处获取身份培训套件。查找示例 Silverlight 实现。

于 2012-06-22T05:26:49.100 回答