【问题标题】:Accessing a Claim Aware WCF from Silverlight从 Silverlight 访问声明感知 WCF
【发布时间】:2011-05-19 13:13:31
【问题描述】:

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

【问题讨论】:

    标签: silverlight wcf azure claims-based-identity


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      Silverlight 不支持开箱即用的基于声明的授权和 WS-Trust。 Microsoft 打算将其放入 Silverlight 5 中,但不幸的是忘记了。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 2011-06-30
        • 2023-03-12
        相关资源
        最近更新 更多